1. JUnit là gì và nó được sử dụng cho mục đích gì trong phát triển phần mềm Java?
A. Một framework để xây dựng giao diện người dùng (UI).
B. Một framework để viết và chạy kiểm thử đơn vị (unit testing) cho mã Java.
C. Một công cụ để quản lý phiên bản mã nguồn (version control).
D. Một công cụ để phân tích hiệu suất mã Java.
2. Garbage Collection (GC) trong Java là gì và nó hoạt động như thế nào?
A. Một quá trình giải phóng bộ nhớ được lập trình viên kiểm soát thủ công.
B. Một quá trình 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ơ chế để phát hiện và sửa lỗi biên dịch.
D. Một phương pháp tối ưu hóa hiệu suất chương trình bằng cách nén bộ nhớ.
3. Maven hoặc Gradle là gì và chúng được sử dụng để làm gì trong dự án Java?
A. Công cụ để kiểm thử hiệu năng ứng dụng Java.
B. Công cụ build tự động và quản lý dependency cho dự án Java.
C. IDE (Integrated Development Environment) cho Java.
D. Công cụ để quản lý cơ sở dữ liệu.
4. AOP (Aspect-Oriented Programming) trong Spring Framework dùng để làm gì?
A. Quản lý vòng đời của đối tượng (bean lifecycle).
B. Xử lý các yêu cầu HTTP trong ứng dụng web.
C. Tách các cross-cutting concerns (như logging, security) ra khỏi logic nghiệp vụ chính của ứng dụng.
D. Cung cấp cơ chế bảo mật cho ứng dụng web.
5. Mục đích của từ khóa `static` trong Java là gì?
A. Khai báo một biến hoặc phương thức là hằng số.
B. Khai báo một biến hoặc phương thức thuộc về lớp chứ không phải thể hiện cụ thể của lớp.
C. Ngăn chặn việc kế thừa lớp hoặc ghi đè phương thức.
D. Tạo ra một đối tượng duy nhất của một lớp (singleton).
6. ORM (Object-Relational Mapping) framework như Hibernate giúp ích gì cho lập trình viên Java?
A. Tăng tốc độ biên dịch mã Java.
B. Giảm sự phức tạp khi làm việc với cơ sở dữ liệu quan hệ bằng cách ánh xạ đối tượng Java với bảng cơ sở dữ liệu.
C. Cung cấp các công cụ để thiết kế giao diện người dùng (UI).
D. Quản lý bộ nhớ tự động (garbage collection).
7. Trong Java, 'polymorphism' (tính đa hình) có nghĩa là gì?
A. Khả năng một lớp có nhiều thuộc tính.
B. Khả năng một đối tượng có nhiều kiểu dữ liệu.
C. Khả năng một phương thức có nhiều cách thực hiện khác nhau tùy thuộc vào đối tượng gọi nó.
D. Khả năng một lớp kế thừa từ nhiều lớp cha.
8. Phương thức `equals()` và toán tử `==` khác nhau như thế nào khi so sánh các đối tượng trong Java?
A. `equals()` so sánh tham chiếu đối tượng, `==` so sánh nội dung đối tượng.
B. `equals()` so sánh nội dung đối tượng, `==` so sánh tham chiếu đối tượng.
C. Không có sự khác biệt, cả hai đều so sánh nội dung đối tượng.
D. Không có sự khác biệt, cả hai đều so sánh tham chiếu đối tượng.
9. Trong Java, 'lambda expression' (biểu thức lambda) được giới thiệu từ phiên bản nào và nó có mục đích gì?
A. Java 1.5, để tạo anonymous inner classes ngắn gọn hơn.
B. Java 8, để cung cấp cú pháp ngắn gọn hơn cho việc biểu diễn functional interfaces và hỗ trợ lập trình hàm.
C. Java 11, để cải thiện hiệu suất garbage collection.
D. Java 17, để thêm tính năng pattern matching.
10. Java Collection Framework cung cấp những gì?
A. Các công cụ để biên dịch mã Java.
B. Một tập hợp các interface và class để lưu trữ và thao tác dữ liệu một cách có cấu trúc (ví dụ: List, Set, Map).
C. Các thư viện để xây dựng giao diện người dùng đồ họa (GUI).
D. Các API để làm việc với mạng và cơ sở dữ liệu.
11. Ngoại lệ (Exception) 'NullPointerException' xảy ra khi nào trong Java?
A. Khi chia một số cho 0.
B. Khi truy cập một biến tham chiếu đối tượng có giá trị `null`.
C. Khi cố gắng truy cập một phần tử mảng ngoài giới hạn.
D. Khi kiểu dữ liệu không tương thích trong phép gán.
12. Điều gì xảy ra nếu bạn cố gắng truy cập một phần tử của mảng vượt quá kích thước của nó trong Java?
A. Chương trình biên dịch thành công nhưng gây ra lỗi thời gian chạy.
B. Chương trình biên dịch không thành công.
C. Chương trình chạy bình thường và trả về giá trị mặc định.
D. Chương trình chạy và tự động mở rộng kích thước mảng.
13. Interface (giao diện) trong Java khác với abstract class (lớp trừu tượng) 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ỉ extends một abstract class.
C. Abstract class chỉ có thể chứa các phương thức trừu tượng, interface thì không.
D. Interface hỗ trợ kế thừa đa lớp, abstract class thì không.
14. Phương thức `toString()` trong Java có mục đích gì?
A. So sánh hai đối tượng.
B. Trả về kiểu dữ liệu của đối tượng.
C. Trả về một biểu diễn chuỗi của đối tượng.
D. Tạo một bản sao của đối tượng.
15. Vòng lặp `for-each` (enhanced for loop) trong Java chủ yếu được sử dụng để làm gì?
A. Lặp qua một khối mã với số lần xác định trước.
B. Lặp qua các phần tử của một mảng hoặc collection.
C. Lặp cho đến khi một điều kiện nhất định trở thành sai.
D. Lặp vô hạn một khối mã.
16. Kiểu dữ liệu nào sau đây KHÔNG phải là kiểu dữ liệu nguyên thủy (primitive data type) trong Java?
A. int
B. float
C. boolean
D. String
17. Trong Java, 'inheritance' (tính kế thừa) cho phép một lớp kế thừa từ bao nhiêu lớp?
A. Không giới hạn số lớp.
B. Chỉ một lớp duy nhất.
C. Tối đa hai lớp.
D. Tối đa ba lớp.
18. RESTful API là gì và nó thường sử dụng giao thức nào để truyền dữ liệu?
A. Một loại giao thức bảo mật cho truyền dữ liệu.
B. Một kiểu kiến trúc phần mềm cho việc xây dựng các dịch vụ web, thường sử dụng HTTP và định dạng dữ liệu JSON hoặc XML.
C. Một framework để phát triển ứng dụng di động.
D. Một công cụ để quản lý cơ sở dữ liệu.
19. Servlet trong Java EE được sử dụng để làm gì?
A. Xử lý logic nghiệp vụ của ứng dụng.
B. Xây dựng giao diện người dùng (UI) cho ứng dụng desktop.
C. Xử lý các yêu cầu HTTP từ client và tạo ra phản hồi web.
D. Quản lý kết nối cơ sở dữ liệu trong ứng dụng web.
20. Java Stream API được sử dụng để làm gì?
A. Xây dựng giao diện người dùng đồ họa (GUI).
B. Xử lý dữ liệu tuần tự hoặc song song từ collections, arrays, hoặc I/O channels một cách hiệu quả và khai báo.
C. Quản lý bộ nhớ và garbage collection.
D. Tạo ra các luồng (threads) để thực hiện đa nhiệm.
21. Trong Java, từ khóa nào được sử dụng để tạo một thể hiện của một lớp?
A. class
B. new
C. instanceof
D. extends
22. So sánh sự khác biệt giữa Checked Exception và Unchecked Exception trong Java.
A. Checked exceptions xảy ra trong thời gian chạy, unchecked exceptions xảy ra trong thời gian biên dịch.
B. Checked exceptions phải được xử lý (try-catch hoặc throws) tại thời điểm biên dịch, unchecked exceptions không bắt buộc phải xử lý.
C. Checked exceptions là lỗi lập trình, unchecked exceptions là lỗi hệ thống.
D. Checked exceptions có thể phục hồi được, unchecked exceptions thì không.
23. JDBC (Java Database Connectivity) là gì?
A. Một framework để phát triển ứng dụng web Java.
B. Một API cho phép các ứng dụng Java tương tác với cơ sở dữ liệu.
C. Một công cụ để kiểm thử hiệu năng của ứng dụng Java.
D. Một thư viện để xây dựng giao diện người dùng đồ họa (GUI) cho cơ sở dữ liệu.
24. Multithreading (đa luồng) trong Java được sử dụng để làm gì?
A. Tăng tốc độ biên dịch chương trình.
B. Thực hiện nhiều tác vụ đồng thời trong một chương trình.
C. Giảm mức sử dụng bộ nhớ của chương trình.
D. Đơn giản hóa việc gỡ lỗi chương trình.
25. Phương thức `main()` trong Java phải có kiểu trả về nào?
A. int
B. String
C. void
D. boolean
26. Logging (ghi log) trong Java là gì và tại sao nó quan trọng trong ứng dụng thực tế?
A. Một kỹ thuật để mã hóa dữ liệu.
B. Quá trình ghi lại thông tin về hoạt động của ứng dụng trong quá trình chạy, giúp theo dõi lỗi, debug, và giám sát ứng dụng.
C. Một phương pháp để tối ưu hóa hiệu suất ứng dụng.
D. Một cách để bảo mật ứng dụng khỏi các cuộc tấn công.
27. Serialization trong Java là quá trình gì?
A. Chuyển đổi dữ liệu từ định dạng XML sang JSON.
B. Chuyển đổi trạng thái của một đối tượng thành một chuỗi byte để có thể lưu trữ hoặc truyền tải.
C. Mã hóa dữ liệu để bảo mật.
D. Giải mã dữ liệu đã được mã hóa.
28. Dependency Injection (DI) là gì và lợi ích của nó trong Spring Framework?
A. Một kỹ thuật để tối ưu hóa hiệu suất ứng dụng.
B. Một mẫu thiết kế phần mềm giúp giảm sự phụ thuộc giữa các thành phần bằng cách 'inject' (tiêm) các dependency vào đối tượng.
C. Một phương pháp kiểm thử đơn vị (unit testing) trong Java.
D. Một công cụ để quản lý bộ nhớ trong ứng dụng Java.
29. Sự khác biệt chính giữa `ArrayList` và `LinkedList` trong Java Collections là gì?
A. `ArrayList` nhanh hơn trong việc thêm/xóa phần tử ở đầu danh sách, `LinkedList` nhanh hơn trong việc truy cập phần tử ngẫu nhiên.
B. `ArrayList` dựa trên mảng động, truy cập phần tử nhanh, chèn/xóa chậm; `LinkedList` dựa trên danh sách liên kết, chèn/xóa nhanh, truy cập chậm.
C. Không có sự khác biệt về hiệu suất, chỉ khác nhau về cách sử dụng.
D. `ArrayList` chỉ lưu trữ được các kiểu dữ liệu nguyên thủy, `LinkedList` lưu trữ được mọi kiểu dữ liệu.
30. JSP (JavaServer Pages) khác với Servlet như thế nào?
A. JSP dùng để xử lý logic nghiệp vụ, Servlet dùng để hiển thị giao diện người dùng.
B. JSP là Servlet được viết dưới dạng HTML với mã Java nhúng, dễ dàng hơn cho việc thiết kế giao diện; Servlet là Java code thuần túy.
C. JSP nhanh hơn Servlet trong việc xử lý yêu cầu web.
D. JSP chỉ dùng cho ứng dụng desktop, Servlet dùng cho ứng dụng web.