1. Tính kế thừa (inheritance) trong OOP cho phép làm gì?
A. Tạo ra các đối tượng độc lập hoàn toàn.
B. Một lớp con (subclass) kế thừa các thuộc tính và phương thức của lớp cha (superclass).
C. Đóng gói dữ liệu và phương thức vào một đối tượng.
D. Một đối tượng có thể thực hiện nhiều hành vi khác nhau.
2. Hàng đợi (queue) là cấu trúc dữ liệu hoạt động theo nguyên tắc nào?
A. LIFO (Last In, First Out - Vào sau ra trước)
B. Sắp xếp theo thứ tự giảm dần.
C. FIFO (First In, First Out - Vào trước ra trước)
D. Truy cập ngẫu nhiên.
3. Hàm (function) trong lập trình có vai trò chính là gì?
A. Tăng tốc độ thực thi chương trình.
B. Tái sử dụng mã và chia nhỏ bài toán.
C. Quản lý bộ nhớ hiệu quả hơn.
D. Bảo mật dữ liệu chương trình.
4. Trong lập trình, biến (variable) được sử dụng để làm gì?
A. Lưu trữ và đại diện cho dữ liệu.
B. Thực hiện các phép toán số học.
C. Điều khiển luồng chương trình.
D. Định nghĩa cấu trúc dữ liệu phức tạp.
5. Cấu trúc điều khiển `if-else` được sử dụng để làm gì?
A. Lặp lại một khối lệnh nhiều lần.
B. Thực hiện một khối lệnh dựa trên điều kiện.
C. Định nghĩa một hàm mới.
D. Xử lý ngoại lệ trong chương trình.
6. Trong lập trình hướng đối tượng (OOP), đối tượng (object) là gì?
A. Một kiểu dữ liệu cơ bản.
B. Một bản thiết kế cho các lớp.
C. Một thể hiện cụ thể của một lớp, chứa dữ liệu và hành vi.
D. Một hàm đặc biệt trong lớp.
7. Khái niệm `lớp` (class) trong lập trình hướng đối tượng (OOP) dùng để làm gì?
A. Lưu trữ dữ liệu toàn cục.
B. Định nghĩa khuôn mẫu cho các đối tượng.
C. Thực hiện các phép toán số học phức tạp.
D. Quản lý bộ nhớ của chương trình.
8. Độ phức tạp thời gian (time complexity) của thuật toán dùng để đánh giá điều gì?
A. Lượng bộ nhớ mà thuật toán sử dụng.
B. Thời gian thực thi của thuật toán trên một máy tính cụ thể.
C. Số lượng phép toán cơ bản mà thuật toán thực hiện, theo kích thước đầu vào.
D. Độ khó hiểu của thuật toán.
9. Debug trong lập trình nghĩa là gì?
A. Viết tài liệu hướng dẫn sử dụng phần mềm.
B. Tối ưu hóa code để chạy nhanh hơn.
C. Tìm và sửa lỗi trong chương trình.
D. Biên dịch chương trình thành mã máy.
10. Trình biên dịch (compiler) và trình thông dịch (interpreter) khác nhau cơ bản ở điểm nào?
A. Trình biên dịch chạy chương trình nhanh hơn trình thông dịch.
B. Trình biên dịch dịch toàn bộ chương trình thành mã máy trước khi thực thi, trình thông dịch dịch và thực thi từng dòng lệnh.
C. Trình biên dịch chỉ dùng cho ngôn ngữ bậc cao, trình thông dịch dùng cho ngôn ngữ bậc thấp.
D. Trình biên dịch dễ sử dụng hơn trình thông dịch.
11. Tham số (parameter) của hàm là gì?
A. Biến cục bộ bên trong hàm.
B. Giá trị trả về của hàm.
C. Dữ liệu đầu vào mà hàm nhận khi được gọi.
D. Tên của hàm.
12. Thuật toán (algorithm) trong lập trình là gì?
A. Một ngôn ngữ lập trình cụ thể.
B. Một chương trình máy tính hoàn chỉnh.
C. Một tập hợp các bước hữu hạn và rõ ràng để giải quyết một vấn đề cụ thể.
D. Phần cứng máy tính dùng để chạy chương trình.
13. Ngăn xếp (stack) là cấu trúc dữ liệu hoạt động theo nguyên tắc nào?
A. FIFO (First In, First Out - Vào trước ra trước)
B. LIFO (Last In, First Out - Vào sau ra trước)
C. Sắp xếp theo thứ tự tăng dần.
D. Truy cập ngẫu nhiên.
14. Giá trị trả về (return value) của hàm là gì?
A. Tham số đầu vào của hàm.
B. Kết quả mà hàm trả về sau khi thực hiện.
C. Tên của hàm.
D. Biến cục bộ bên trong hàm.
15. Ngôn ngữ lập trình bậc cao (high-level programming language) có ưu điểm gì so với ngôn ngữ lập trình bậc thấp (low-level programming language)?
A. Chạy nhanh hơn và hiệu quả hơn về mặt bộ nhớ.
B. Gần gũi với phần cứng máy tính hơn.
C. Dễ đọc, dễ viết và dễ bảo trì hơn.
D. Cho phép kiểm soát phần cứng ở mức độ chi tiết cao hơn.
16. Quy trình phát triển phần mềm (Software Development Life Cycle - SDLC) là gì?
A. Một loại ngôn ngữ lập trình.
B. Một tập hợp các giai đoạn có cấu trúc được sử dụng để phát triển phần mềm.
C. Một công cụ để kiểm thử phần mềm.
D. Một phương pháp để tối ưu hóa hiệu suất chương trình.
17. Lỗi cú pháp (syntax error) trong lập trình là gì?
A. Lỗi logic trong thuật toán.
B. Lỗi do người dùng nhập dữ liệu không hợp lệ.
C. Lỗi vi phạm quy tắc ngữ pháp của ngôn ngữ lập trình.
D. Lỗi xảy ra khi chương trình chạy quá chậm.
18. Mục đích chính của việc sử dụng chú thích (comment) trong code là gì?
A. Tăng tốc độ biên dịch chương trình.
B. Giúp chương trình chạy nhanh hơn.
C. Giải thích code cho người đọc và chính lập trình viên.
D. Bảo vệ bản quyền code.
19. Biến toàn cục (global variable) là gì?
A. Biến chỉ được sử dụng trong một hàm.
B. Biến được khai báo bên trong vòng lặp.
C. Biến được khai báo bên ngoài tất cả các hàm và có thể truy cập từ mọi nơi trong chương trình.
D. Biến dùng để lưu trữ dữ liệu toàn bộ hệ thống.
20. Phép toán nào sau đây dùng để kiểm tra tính bằng nhau giữa hai giá trị trong biểu thức điều kiện?
21. Kiểu dữ liệu nào sau đây KHÔNG phải là kiểu dữ liệu cơ bản trong hầu hết các ngôn ngữ lập trình?
A. Số nguyên (Integer)
B. Số thực (Float)
C. Chuỗi ký tự (String)
D. Mảng (Array)
22. Cấu trúc dữ liệu (data structure) là gì?
A. Một kiểu dữ liệu cơ bản như số nguyên hay số thực.
B. Cách tổ chức và lưu trữ dữ liệu trong máy tính để có thể truy cập và thao tác dữ liệu đó một cách hiệu quả.
C. Một thuật toán cụ thể để sắp xếp dữ liệu.
D. Một ngôn ngữ lập trình để quản lý dữ liệu.
23. Tính đa hình (polymorphism) trong OOP nghĩa là gì?
A. Một lớp chỉ có thể có một đối tượng.
B. Các đối tượng của các lớp khác nhau có thể được xử lý thông qua một giao diện chung.
C. Dữ liệu và phương thức được đóng gói trong một lớp.
D. Một lớp kế thừa từ nhiều lớp khác.
24. Trong lập trình, `mã giả` (pseudocode) thường được dùng để làm gì?
A. Thay thế cho mã nguồn thật để tăng tốc độ.
B. Mô tả thuật toán hoặc logic chương trình một cách dễ hiểu, gần với ngôn ngữ tự nhiên.
C. Biên dịch chương trình sang mã máy.
D. Bảo vệ mã nguồn khỏi bị sao chép.
25. Tính đóng gói (encapsulation) trong OOP là gì?
A. Khả năng một đối tượng có nhiều hình thức.
B. Khả năng một lớp kế thừa thuộc tính và phương thức từ lớp khác.
C. Việc gói dữ liệu và phương thức thao tác dữ liệu đó vào trong một đơn vị (lớp), và che giấu thông tin chi tiết bên trong.
D. Khả năng tạo ra nhiều đối tượng từ cùng một lớp.
26. Giai đoạn `kiểm thử` (testing) trong SDLC có mục đích chính là gì?
A. Thiết kế giao diện người dùng.
B. Viết mã chương trình.
C. Tìm và sửa lỗi (bug) trong phần mềm.
D. Thu thập yêu cầu từ người dùng.
27. Vòng lặp `for` thường được sử dụng khi nào?
A. Khi số lần lặp không xác định trước.
B. Khi cần lặp vô hạn.
C. Khi biết trước số lần lặp.
D. Khi cần kiểm tra điều kiện trước mỗi lần lặp.
28. Danh sách liên kết (linked list) khác với mảng ở điểm nào?
A. Danh sách liên kết có tốc độ truy cập phần tử nhanh hơn mảng.
B. Danh sách liên kết lưu trữ các phần tử liên tiếp trong bộ nhớ.
C. Danh sách liên kết có kích thước cố định.
D. Danh sách liên kết có thể thay đổi kích thước động trong quá trình thực thi.
29. Trong lập trình web, ngôn ngữ nào thường được sử dụng để tạo giao diện người dùng (front-end)?
A. SQL
B. Java
C. HTML, CSS, JavaScript
D. Python
30. Mảng (array) là cấu trúc dữ liệu như thế nào?
A. Tập hợp các phần tử có kiểu dữ liệu khác nhau.
B. Tập hợp các phần tử có cùng kiểu dữ liệu và được lưu trữ liên tiếp trong bộ nhớ.
C. Cấu trúc dữ liệu động, kích thước có thể thay đổi linh hoạt.
D. Cấu trúc dữ liệu phi tuyến tính.