1. Ký hiệu "O(n)" (Big O notation) thường dùng để biểu diễn điều gì trong phân tích độ phức tạp thuật toán?
A. Độ chính xác tuyệt đối của thuật toán.
B. Độ phức tạp về thời gian hoặc không gian ở trường hợp xấu nhất (worst-case), tăng trưởng theo quy mô đầu vào.
C. Số lượng lỗi trong mã nguồn.
D. Tốc độ thực thi của một câu lệnh đơn lẻ.
2. Trong khoa học máy tính, "thuật toán" (algorithm) là gì?
A. Một chương trình máy tính hoàn chỉnh.
B. Một tập hợp hữu hạn các bước rõ ràng, có thứ tự để giải quyết một vấn đề hoặc thực hiện một nhiệm vụ.
C. Một ngôn ngữ lập trình được sử dụng để viết mã.
D. Một loại phần cứng máy tính.
3. Khái niệm "kế thừa" (inheritance) trong OOP cho phép điều gì?
A. Một lớp có thể có nhiều tên khác nhau.
B. Một lớp mới (lớp con) có thể kế thừa các thuộc tính và phương thức từ một lớp đã có (lớp cha).
C. Một đối tượng có thể thay đổi lớp của nó trong quá trình chạy.
D. Các phương thức trong một lớp có thể được gọi một cách ngẫu nhiên.
4. Trong cấu trúc rẽ nhánh "if-else", khi điều kiện trong "if" là đúng, hành động nào sẽ được thực hiện?
A. Các câu lệnh trong khối "else" sẽ được thực hiện.
B. Các câu lệnh trong khối "if" sẽ được thực hiện.
C. Chương trình sẽ kết thúc ngay lập tức.
D. Chương trình sẽ chuyển sang khối "elif" (nếu có).
5. Cấu trúc lặp "for" thường được sử dụng khi nào?
A. Khi cần thực hiện một hành động một lần duy nhất.
B. Khi cần lặp lại một khối lệnh một số lần xác định trước hoặc duyệt qua một tập hợp các phần tử.
C. Khi không biết trước số lần cần lặp.
D. Khi chỉ có một điều kiện duy nhất để lặp.
6. Khi một đối tượng được tạo ra từ một lớp, đối tượng đó được gọi là gì?
A. Một lớp cha (Parent Class).
B. Một phiên bản (Instance) của lớp đó.
C. Một thuộc tính (Attribute).
D. Một phương thức (Method).
7. Trong lập trình, "biến" (variable) được định nghĩa là gì?
A. Một thuật toán được định nghĩa trước.
B. Một tên gọi để tham chiếu đến một giá trị có thể thay đổi trong bộ nhớ.
C. Một câu lệnh để thực thi một tác vụ cụ thể.
D. Một cấu trúc dữ liệu dùng để lưu trữ nhiều giá trị cùng lúc.
8. Khi truy cập phần tử đầu tiên của một mảng có tên "myArray" trong hầu hết các ngôn ngữ lập trình, chỉ số (index) được sử dụng là gì?
A. 1
B. 0
C. myArray.first
D. undefined
9. Khái niệm "chuỗi" (string) trong lập trình thường được biểu diễn như thế nào?
A. Một tập hợp các số nguyên.
B. Một tập hợp các ký tự được sắp xếp theo một thứ tự nhất định.
C. Một cấu trúc dữ liệu chỉ lưu trữ một ký tự.
D. Một biến có thể lưu trữ mọi loại dữ liệu.
10. Khái niệm "mảng" (array) trong lập trình được hiểu là gì?
A. Một tập hợp các biến độc lập.
B. Một cấu trúc dữ liệu lưu trữ một tập hợp các phần tử cùng kiểu, có thể truy cập thông qua chỉ số (index).
C. Một chuỗi các lệnh được thực thi tuần tự.
D. Một hàm nhận vào nhiều đối số.
11. Toán tử "+" trong hầu hết các ngôn ngữ lập trình có thể được sử dụng cho hai mục đích chính, đó là gì?
A. Phép nhân và phép chia.
B. Phép cộng số học và phép nối chuỗi.
C. Phép gán giá trị và phép so sánh bằng.
D. Phép tăng giá trị và phép giảm giá trị.
12. Khái niệm "hằng số" (constant) trong lập trình khác với "biến" (variable) ở điểm nào?
A. Hằng số luôn có kiểu dữ liệu là số nguyên.
B. Giá trị của hằng số không thể thay đổi sau khi được gán.
C. Hằng số chỉ được sử dụng trong các phép toán số học.
D. Biến không thể được khai báo.
13. Trong lập trình, hàm (function) hoặc phương thức (method) là gì?
A. Một biến lưu trữ dữ liệu.
B. Một khối mã có tên, được thiết kế để thực hiện một nhiệm vụ cụ thể và có thể được gọi lại nhiều lần.
C. Một câu lệnh để kết thúc chương trình.
D. Một cấu trúc dữ liệu để lưu trữ nhiều giá trị.
14. Một thuật toán tìm kiếm tuần tự (linear search) có độ phức tạp thời gian là bao nhiêu nếu tìm kiếm trong một mảng có "n" phần tử?
A. O(1)
B. O(log n)
C. O(n)
D. O(n^2)
15. Khái niệm "lập trình hướng đối tượng" (Object-Oriented Programming - OOP) tập trung vào việc tổ chức mã như thế nào?
A. Tập trung vào các câu lệnh tuần tự và cấu trúc điều khiển.
B. Tổ chức mã xung quanh các "đối tượng" (objects), kết hợp dữ liệu (thuộc tính) và hành vi (phương thức).
C. Sử dụng chủ yếu các cấu trúc mảng và vòng lặp.
D. Tập trung vào việc tối ưu hóa hiệu suất bằng cách giảm thiểu sử dụng bộ nhớ.
16. Trong thiết kế thuật toán, "phân tích độ phức tạp" (complexity analysis) nhằm mục đích gì?
A. Để xác định ngôn ngữ lập trình tốt nhất.
B. Để ước lượng tài nguyên (thời gian, bộ nhớ) mà thuật toán yêu cầu dựa trên kích thước đầu vào.
C. Để kiểm tra cú pháp của mã nguồn.
D. Để định nghĩa lại các biến trong chương trình.
17. Thuật toán sắp xếp nổi bọt (bubble sort) có độ phức tạp thời gian trong trường hợp xấu nhất là bao nhiêu?
A. O(n)
B. O(n log n)
C. O(n^2)
D. O(log n)
18. Trong OOP, "lớp" (class) là gì?
A. Một đối tượng cụ thể đã được tạo ra.
B. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng, định nghĩa các thuộc tính và phương thức chung.
C. Một biến lưu trữ trạng thái của chương trình.
D. Một thuật toán để thực hiện một phép toán.
19. Cấu trúc lặp "while" thường được sử dụng khi nào?
A. Khi cần lặp lại một khối lệnh một số lần xác định trước.
B. Khi cần thực hiện hành động ít nhất một lần rồi mới kiểm tra điều kiện.
C. Khi cần lặp lại một khối lệnh miễn là một điều kiện nào đó còn đúng.
D. Khi cần duyệt qua tất cả các phần tử của một mảng.
20. Khái niệm "đóng gói" (encapsulation) trong OOP nhằm mục đích gì?
A. Cho phép các đối tượng từ các lớp khác truy cập trực tiếp vào dữ liệu nội bộ.
B. Kết hợp dữ liệu (thuộc tính) và các phương thức xử lý dữ liệu đó vào một đơn vị duy nhất (đối tượng) và ẩn đi chi tiết triển khai.
C. Tạo ra các lớp mới dựa trên các lớp đã có.
D. Cho phép một đối tượng có nhiều dạng biểu hiện.
21. Khi một hàm nhận vào các giá trị để xử lý, các giá trị này được gọi là gì?
A. Đầu ra (Output).
B. Tham số (Parameters) hoặc Đối số (Arguments).
C. Biến cục bộ (Local Variables).
D. Hằng số (Constants).
22. Trong lập trình, "toán tử" (operator) dùng để làm gì?
A. Để định nghĩa cấu trúc điều khiển.
B. Để thực hiện các phép toán hoặc hành động trên một hoặc nhiều toán hạng (operands).
C. Để khai báo biến và hằng số.
D. Để kết thúc một câu lệnh.
23. Phát biểu nào sau đây mô tả đúng vai trò của "kiểu dữ liệu" (data type) trong lập trình?
A. Kiểu dữ liệu xác định tốc độ xử lý của chương trình.
B. Kiểu dữ liệu quy định loại giá trị mà biến có thể lưu trữ và các phép toán có thể thực hiện trên giá trị đó.
C. Kiểu dữ liệu chỉ áp dụng cho các biến số.
D. Kiểu dữ liệu là tùy chọn và không ảnh hưởng đến hoạt động của chương trình.
24. Đặc điểm nào sau đây KHÔNG phải là thuộc tính của một thuật toán tốt?
A. Tính rõ ràng (Clarity).
B. Tính hiệu quả (Efficiency).
C. Tính tùy ý (Arbitrariness).
D. Tính hữu hạn (Finiteness).
25. Khái niệm "đa hình" (polymorphism) trong OOP có nghĩa là gì?
A. Một đối tượng chỉ có một loại dữ liệu duy nhất.
B. Cho phép các đối tượng thuộc các lớp khác nhau phản ứng với cùng một thông điệp (lời gọi phương thức) theo cách riêng của chúng.
C. Một lớp có thể được định nghĩa mà không cần bất kỳ thuộc tính nào.
D. Tất cả các phương thức trong một lớp phải có cùng tên.