1. Phương thức 'substring(int beginIndex, int endIndex)' của lớp String trong Java trả về giá trị gì?
A. Chuỗi con bắt đầu từ vị trí 'beginIndex' và kết thúc tại vị trí 'endIndex' (không bao gồm)
B. Chuỗi con bắt đầu từ vị trí 'beginIndex' và kết thúc tại vị trí 'endIndex' (bao gồm)
C. Chuỗi con từ vị trí 'beginIndex' đến hết chuỗi gốc
D. Vị trí của chuỗi con trong chuỗi gốc
2. Trong Java Collections Framework, 'List' và 'Set' khác nhau như thế nào?
A. List cho phép phần tử trùng lặp, Set thì không
B. Set duy trì thứ tự chèn, List thì không
C. List nhanh hơn Set trong việc tìm kiếm phần tử
D. Set chỉ chứa các đối tượng immutable, List thì không
3. Trong lập trình hướng đối tượng Java, 'encapsulation' (tính đóng gói) có nghĩa là gì?
A. Che giấu thông tin chi tiết triển khai và chỉ hiển thị giao diện bên ngoài
B. Tạo ra các lớp không thể kế thừa
C. Cho phép một lớp có nhiều lớp con
D. Đảm bảo rằng các đối tượng không thể thay đổi sau khi tạo
4. Trong Java, 'checked exception' khác với 'unchecked exception' như thế nào?
A. Checked exception phải được xử lý hoặc khai báo ném ra, unchecked exception thì không bắt buộc
B. Unchecked exception xảy ra khi biên dịch, checked exception xảy ra khi chạy
C. Checked exception là lỗi lập trình, unchecked exception là lỗi hệ thống
D. Checked exception luôn nghiêm trọng hơn unchecked exception
5. Đâu là mệnh đề đúng về 'đa luồng' (multithreading) trong Java?
A. Đa luồng luôn làm tăng hiệu năng chương trình trong mọi trường hợp
B. Đa luồng cho phép thực hiện đồng thời nhiều phần của chương trình trong cùng một tiến trình
C. Java chỉ hỗ trợ đơn luồng
D. Đa luồng chỉ được sử dụng cho các ứng dụng web
6. Đâu là cách sử dụng 'lambda expression' (biểu thức lambda) trong Java?
A. Để định nghĩa lớp ẩn danh (anonymous class) một cách ngắn gọn hơn, đặc biệt cho các functional interface
B. Để tạo ra các biến hằng số
C. Để khai báo interface
D. Để xử lý ngoại lệ
7. Trong Java, 'annotation' (chú thích) được sử dụng để làm gì?
A. Để thêm bình luận vào mã nguồn
B. Để cung cấp metadata (dữ liệu về dữ liệu) cho trình biên dịch, JVM hoặc các công cụ khác
C. Để mã hóa dữ liệu
D. Để tối ưu hóa hiệu năng chương trình
8. Đâu là mục đích của 'try-with-resources' statement trong Java?
A. Để xử lý đồng thời nhiều ngoại lệ
B. Để tự động đóng các tài nguyên (ví dụ: file, kết nối) sau khi sử dụng, đảm bảo giải phóng tài nguyên
C. Để tạo ra các luồng (threads)
D. Để ghi log chương trình
9. Trong Java, kiểu dữ liệu nào sau đây KHÔNG phải là kiểu dữ liệu nguyên thủy?
A. int
B. boolean
C. char
D. String
10. Trong Java, 'access modifier' (bộ điều khiển truy cập) 'protected' có ý nghĩa gì?
A. Chỉ cho phép truy cập từ bên trong lớp và các lớp con cùng package
B. Chỉ cho phép truy cập từ bên trong lớp và các lớp con, bất kể package
C. Cho phép truy cập từ bất kỳ đâu
D. Chỉ cho phép truy cập từ bên trong lớp
11. Đâu là mục đích chính của từ khóa 'static' trong Java?
A. Tạo ra các biến và phương thức chỉ có thể truy cập từ bên trong lớp
B. Tạo ra các biến và phương thức thuộc về lớp chứ không phải đối tượng cụ thể của lớp
C. Ngăn chặn việc kế thừa lớp
D. Cho phép tạo ra các đối tượng không thể thay đổi
12. Trong Java, interface khác với abstract class ở điểm 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ỉ extends một abstract class
C. Abstract class nhanh hơn interface về hiệu năng
D. Interface hỗ trợ đa kế thừa, abstract class thì không
13. Điều gì xảy ra khi một ngoại lệ 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 bị treo và không phản hồi
C. Chương trình kết thúc đột ngột và in ra thông báo lỗi (stack trace)
D. Ngoại lệ bị bỏ qua và chương trình chạy tiếp
14. Trong Java, 'garbage collection' (thu gom rác) là gì?
A. Quá trình giải phóng bộ nhớ đã được cấp phát cho các đối tượng không còn được sử dụng nữa.
B. Quá trình dọn dẹp các file tạm trên ổ cứng.
C. Quá trình kiểm tra và sửa lỗi cú pháp trong mã nguồn.
D. Quá trình biên dịch mã nguồn Java thành bytecode.
15. Phương thức nào sau đây được sử dụng để bắt đầu một luồng mới trong Java?
A. run()
B. start()
C. execute()
D. initiate()
16. Từ khóa 'final' trong Java được sử dụng để làm gì?
A. Khai báo một lớp không thể kế thừa, một phương thức không thể ghi đè, hoặc một biến có giá trị không đổi.
B. Bắt buộc lớp phải được kế thừa
C. Tạo ra các biến toàn cục
D. Chỉ định rằng một phương thức là phương thức cuối cùng trong chuỗi kế thừa
17. Đâu là cách khai báo đúng một mảng các số nguyên trong Java có tên 'numbers' và khởi tạo nó với 5 phần tử?
A. int numbers = new array[5];
B. int[] numbers = new int[5];
C. array numbers = new array(5);
D. int numbers[5] = new int[];
18. Phương thức 'toString()' trong Java thường được ghi đè để làm gì?
A. Để so sánh hai đối tượng bằng nội dung
B. Để trả về một chuỗi đại diện cho đối tượng, thường dùng để in hoặc debug
C. Để chuyển đổi đối tượng sang kiểu dữ liệu String
D. Để tạo ra bản sao của đối tượng
19. Trong Java, từ khóa nào được sử dụng để tạo một lớp con kế thừa từ một lớp cha?
A. implements
B. extends
C. inherits
D. subclass
20. Mục đích chính của 'Java Virtual Machine' (JVM) là gì?
A. Biên dịch mã nguồn Java thành mã máy
B. Chạy bytecode Java và cung cấp môi trường thực thi độc lập nền tảng
C. Quản lý bộ nhớ và thu gom rác
D. Tất cả các đáp án trên
21. Trong Java, 'generic' (tham số hóa kiểu) được sử dụng để làm gì?
A. Để tăng tốc độ biên dịch
B. Để cung cấp sự an toàn kiểu (type safety) tại thời điểm biên dịch và tái sử dụng mã
C. Để tạo ra các lớp trừu tượng
D. Để quản lý bộ nhớ hiệu quả hơn
22. Đâ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ị tham chiếu, 'equals()' so sánh nội dung đối tượng
B. '==' chỉ dùng cho kiểu dữ liệu nguyên thủy, 'equals()' dùng cho đối tượng
C. '==' nhanh hơn 'equals()'
D. 'equals()' không thể so sánh null, '==' có thể
23. Phương thức 'hashCode()' và 'equals()' thường được ghi đè cùng nhau trong Java, tại sao?
A. Để tăng hiệu năng chương trình
B. Để đảm bảo tính nhất quán khi so sánh đối tượng trong các collection dựa trên hash (ví dụ: HashMap, HashSet)
C. Để đơn giản hóa việc serialization
D. Để tạo ra các đối tượng immutable
24. Trong Java, 'serialization' (tuần tự hóa) là gì?
A. Quá trình chuyển đổi đối tượng thành một chuỗi byte để lưu trữ hoặc truyền qua mạng
B. Quá trình mã hóa dữ liệu để bảo mật
C. Quá trình biên dịch mã nguồn Java
D. Quá trình đóng gói mã và dữ liệu vào một đơn vị
25. 'SOLID' principles trong lập trình hướng đối tượng là gì?
A. Một tập hợp các mẫu thiết kế (design patterns) phổ biến
B. Một tập hợp các nguyên tắc thiết kế phần mềm giúp tạo ra phần mềm dễ bảo trì, mở rộng và linh hoạt
C. Một framework để phát triển ứng dụng web Java
D. Một công cụ để kiểm thử mã nguồn Java
26. Đâu là cách tạo một đối tượng 'String' immutable trong Java?
A. Sử dụng từ khóa 'final' khi khai báo biến String
B. Tất cả các đối tượng String trong Java đều immutable
C. Sử dụng phương thức 'makeImmutable()' của lớp String
D. Không thể tạo đối tượng String immutable trong Java
27. Trong Java, 'reflection' (phản xạ) cho phép làm gì?
A. Chạy mã Java trên nhiều nền tảng khác nhau
B. Kiểm tra và sửa đổi thông tin về lớp, interface, constructor và phương thức tại thời điểm runtime
C. Tối ưu hóa hiệu năng của chương trình
D. Tự động tạo mã nguồn Java
28. Vòng lặp 'for-each' trong Java chủ yếu được sử dụng để làm gì?
A. Lặp qua các phần tử của một mảng hoặc collection
B. Lặp vô hạn cho đến khi có điều kiện dừng
C. Lặp với một số lần lặp cố định, giảm dần
D. Thay thế hoàn toàn cho vòng lặp 'for' truyền thống trong mọi trường hợp
29. Phương thức nào sau đây được gọi tự động ngay trước khi một đối tượng Java bị thu gom bởi trình thu gom rác?
A. finalize()
B. gc()
C. delete()
D. dispose()
30. Đâu là mệnh đề KHÔNG ĐÚNG về 'constructor' (hàm tạo) trong Java?
A. Constructor có cùng tên với tên lớp
B. Constructor không có kiểu trả về
C. Constructor được gọi tự động khi một đối tượng được tạo ra
D. Constructor có thể được gọi trực tiếp từ bên ngoài lớp