1. Ngôn ngữ lập trình nào thường được sử dụng để tạo ra các trang web tương tác và động phía máy khách (client-side)?
A. Python
B. Java
C. JavaScript
D. SQL
2. Trong lập trình hướng đối tượng, hành động tạo ra một đối tượng từ một lớp được gọi là gì?
A. Kế thừa
B. Khởi tạo (Instantiation)
C. Đóng gói
D. Trừu tượng hóa
3. Trong lập trình hướng đối tượng, khái niệm nào cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác, tạo ra mối quan hệ "là một" (is-a)?
A. Trừu tượng hóa
B. Đóng gói
C. Kế thừa
D. Đa hình
4. Cấu trúc dữ liệu nào phù hợp nhất để triển khai hàng đợi (queue) với nguyên tắc vào trước, ra trước (First-In, First-Out - FIFO)?
A. Ngăn xếp (Stack)
B. Danh sách liên kết (Linked List)
C. Hàng đợi (Queue - dựa trên danh sách liên kết hoặc mảng)
D. Cây (Tree)
5. Trong cấu trúc dữ liệu cây nhị phân tìm kiếm (Binary Search Tree - BST), nếu một nút có giá trị nhỏ hơn nút cha, nó sẽ nằm ở đâu?
A. Bên phải nút cha
B. Bên trái nút cha
C. Ở bất kỳ vị trí nào
D. Không thể có nút có giá trị nhỏ hơn nút cha
6. Cấu trúc dữ liệu nào hoạt động theo nguyên tắc "vào trước, ra trước" (FIFO) và thường được dùng để quản lý các tác vụ theo thứ tự đến?
A. Ngăn xếp (Stack)
B. Hàng đợi (Queue)
C. Danh sách liên kết
D. Cây nhị phân
7. Nguyên tắc nào trong lập trình hướng đối tượng giúp che giấu các chi tiết triển khai bên trong và chỉ cho phép truy cập thông qua các giao diện công khai (public interface)?
A. Đa hình
B. Đóng gói
C. Kế thừa
D. Trừu tượng hóa
8. Một thuật toán sắp xếp nhanh (Quick Sort) có độ phức tạp thời gian trung bình là bao nhiêu?
A. O(n)
B. O(n log n)
C. O(n^2)
D. O(log n)
9. Một thuật toán sắp xếp trộn (Merge Sort) có độ phức tạp thời gian là bao nhiêu trong mọi trường hợp (trường hợp tốt nhất, trung bình, xấu nhất)?
A. O(n)
B. O(n log n)
C. O(n^2)
D. O(log n)
10. Cấu trúc dữ liệu nào cho phép truy cập các phần tử theo một chỉ số (index) duy nhất và có kích thước cố định hoặc có thể thay đổi?
A. Ngăn xếp (Stack)
B. Danh sách liên kết (Linked List)
C. Mảng (Array)
D. Hàng đợi (Queue)
11. Một thuật toán có độ phức tạp thời gian O(1) nghĩa là gì?
A. Thời gian thực thi tăng tuyến tính theo kích thước đầu vào
B. Thời gian thực thi không phụ thuộc vào kích thước đầu vào
C. Thời gian thực thi tăng theo logarit của kích thước đầu vào
D. Thời gian thực thi tăng theo bình phương kích thước đầu vào
12. Khái niệm "interface" trong lập trình hướng đối tượng định nghĩa điều gì?
A. Là một lớp trừu tượng hoàn toàn, không có triển khai
B. Là một hợp đồng định nghĩa các phương thức mà một lớp phải triển khai
C. Là một lớp cha mà các lớp khác kế thừa
D. Là một biến toàn cục có thể truy cập từ mọi nơi
13. Trong các ngôn ngữ lập trình hiện đại, từ khóa "public", "private", "protected" được sử dụng để điều khiển điều gì?
A. Kiểu dữ liệu của biến
B. Phạm vi truy cập (access modifiers) của thành viên lớp
C. Vòng lặp của chương trình
D. Cấu trúc điều kiện
14. Khi phân tích độ phức tạp của thuật toán, ký hiệu Big O (O) biểu thị điều gì?
A. Thời gian thực thi chính xác của thuật toán
B. Số lượng bộ nhớ mà thuật toán sử dụng
C. Giới hạn trên của tốc độ tăng trưởng thời gian thực thi hoặc không gian sử dụng khi kích thước đầu vào tăng lên
D. Thời gian thực thi trung bình của thuật toán
15. Trong ngôn ngữ C++, hàm tạo (constructor) có vai trò gì?
A. Để hủy đối tượng khi không còn sử dụng
B. Để khởi tạo trạng thái ban đầu cho đối tượng khi nó được tạo ra
C. Để thực hiện các phép toán trên đối tượng
D. Để định nghĩa các lớp con
16. Một thuật toán tìm kiếm tuần tự (linear search) trên một danh sách không được sắp xếp có độ phức tạp thời gian là bao nhiêu trong trường hợp xấu nhất?
A. O(1)
B. O(log n)
C. O(n)
D. O(n log n)
17. Nguyên tắc nào trong lập trình hướng đối tượng cho phép các đối tượng thuộc các lớp khác nhau phản ứng khác nhau với cùng một thông điệp (method call)?
A. Đóng gói
B. Kế thừa
C. Trừu tượng hóa
D. Đa hình (runtime polymorphism/dynamic dispatch)
18. Trong thuật toán tìm kiếm nhị phân (Binary Search), điều kiện tiên quyết để áp dụng là gì?
A. Dữ liệu phải được lưu trữ dưới dạng cây
B. Dữ liệu phải được sắp xếp theo thứ tự tăng hoặc giảm
C. Dữ liệu phải là duy nhất, không có phần tử trùng lặp
D. Dữ liệu phải có kích thước nhỏ hơn 100 phần tử
19. Trong lập trình hướng đối tượng, khi một lớp có nhiều phương thức có cùng tên nhưng khác nhau về tham số đầu vào, đây là biểu hiện của nguyên tắc nào?
A. Đóng gói
B. Kế thừa
C. Đa hình (quá tải phương thức - method overloading)
D. Trừu tượng hóa
20. Thuật toán đệ quy (recursive algorithm) là thuật toán mà trong đó:
A. Nó chỉ sử dụng vòng lặp để giải quyết vấn đề
B. Nó gọi lại chính nó để giải quyết các bài toán con nhỏ hơn
C. Nó yêu cầu một lượng bộ nhớ cố định
D. Nó chỉ hoạt động trên dữ liệu đã được sắp xếp
21. Cấu trúc dữ liệu nào sau đây hoạt động theo nguyên tắc vào sau, ra trước (Last-In, First-Out - LIFO)?
A. Hàng đợi (Queue)
B. Ngăn xếp (Stack)
C. Danh sách liên kết (Linked List)
D. Hàng đợi ưu tiên (Priority Queue)
22. Trong lập trình, một "class" có thể được coi là gì?
A. Một thể hiện (instance) của đối tượng
B. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng
C. Một hàm độc lập không thuộc về đối tượng nào
D. Một biến toàn cục
23. Ngôn ngữ lập trình nào thường được sử dụng để phát triển ứng dụng web phía máy chủ (server-side)?
A. HTML
B. CSS
C. JavaScript (chạy trên Node.js)
D. XML
24. Độ phức tạp thời gian O(n^2) thường xuất hiện trong các thuật toán nào sau đây?
A. Tìm kiếm nhị phân
B. Sắp xếp nổi bọt (Bubble Sort) hoặc Sắp xếp chọn (Selection Sort)
C. Duyệt cây nhị phân
D. Tháp Hà Nội
25. Nguyên tắc "trừu tượng hóa" trong lập trình hướng đối tượng tập trung vào điều gì?
A. Giảm thiểu số dòng code
B. Che giấu các chi tiết không cần thiết và chỉ hiển thị các chức năng cốt lõi
C. Tăng tốc độ thực thi của chương trình
D. Đảm bảo mọi đối tượng có cùng hành vi