1. Trong ngôn ngữ lập trình, "kiểu dữ liệu" có vai trò gì?
A. Xác định cấu trúc của dữ liệu đầu vào cho chương trình.
B. Quy định cách thức mà dữ liệu được lưu trữ, diễn giải và thao tác.
C. Đảm bảo tính bảo mật cho các biến trong chương trình.
D. Tự động tối ưu hóa hiệu suất của chương trình.
2. Phát biểu nào sau đây mô tả đúng vai trò của "biến" trong lập trình?
A. Là một quy tắc để kiểm soát luồng thực thi của chương trình.
B. Là một tên đại diện cho một giá trị có thể thay đổi trong quá trình chương trình chạy.
C. Là một khối lệnh thực hiện một chức năng cụ thể.
D. Là một cách để định nghĩa kiểu dữ liệu mới.
3. Lỗi "syntax error" (lỗi cú pháp) trong lập trình là gì?
A. Lỗi logic khiến chương trình cho ra kết quả sai.
B. Lỗi xảy ra khi mã nguồn không tuân thủ các quy tắc ngữ pháp của ngôn ngữ lập trình.
C. Lỗi do chương trình yêu cầu quá nhiều bộ nhớ.
D. Lỗi do người dùng nhập sai dữ liệu đầu vào.
4. Phát biểu nào sau đây mô tả đúng về "mảng" (array) trong lập trình?
A. Là một tập hợp các biến với các kiểu dữ liệu khác nhau.
B. Là 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. Là một cách để định nghĩa các hàm đệ quy.
D. Là một cấu trúc dữ liệu chỉ có thể chứa một phần tử duy nhất.
5. Trong lập trình, "hàm" (function) hoặc "phương thức" (method) có lợi ích gì?
A. Chỉ dùng để lưu trữ dữ liệu tạm thời.
B. Giúp chia nhỏ chương trình thành các khối chức năng có thể tái sử dụng, làm cho mã nguồn dễ quản lý và đọc hiểu hơn.
C. Đảm bảo tất cả các biến là số nguyên.
D. Tự động tạo ra các câu lệnh lặp.
6. Tại sao việc sử dụng "vòng lặp" (loop) lại quan trọng trong lập trình?
A. Giúp chương trình có giao diện người dùng đẹp mắt hơn.
B. Cho phép thực hiện lặp đi lặp lại một khối lệnh mà không cần viết lại mã nhiều lần.
C. Tăng cường khả năng bảo mật cho dữ liệu nhạy cảm.
D. Chỉ dùng để xử lý các phép toán số học phức tạp.
7. Trong lập trình, "cấu trúc dữ liệu" (data structure) là gì?
A. Là các câu lệnh điều khiển luồng chương trình.
B. Là cách thức tổ chức, quản lý và lưu trữ dữ liệu để truy cập và thao tác hiệu quả.
C. Là các thuật toán được sử dụng để xử lý dữ liệu.
D. Là các quy tắc về cú pháp của ngôn ngữ lập trình.
8. Khái niệm "mô hình hóa" (modeling) trong khoa học máy tính là gì?
A. Viết mã nguồn bằng ngôn ngữ lập trình.
B. Tạo ra một biểu diễn trừu tượng hoặc đơn giản hóa của một hệ thống hoặc khái niệm thực tế.
C. Thực hiện kiểm thử đơn vị cho từng hàm.
D. Biên dịch mã nguồn thành mã máy.
9. Phát biểu nào sau đây mô tả đúng về "ngôn ngữ lập trình bậc cao"?
A. Gần với ngôn ngữ máy, dễ hiểu cho máy tính nhưng khó cho con người.
B. Sử dụng các từ khóa, cú pháp và cấu trúc gần gũi với ngôn ngữ tự nhiên của con người, dễ học và viết hơn.
C. Chỉ có thể thực thi trực tiếp bởi bộ xử lý trung tâm (CPU).
D. Yêu cầu người lập trình phải hiểu sâu về cấu trúc phần cứng máy tính.
10. Khái niệm "đóng gói" (encapsulation) trong OOP có ý nghĩa gì?
A. Cho phép một lớp kế thừa tất cả thuộc tính và phương thức từ lớp khác.
B. Kết hợp dữ liệu (thuộc tính) và các phương thức thao tác trên dữ liệu đó vào một đơn vị duy nhất (đối tượng).
C. Cho phép nhiều đối tượng có thể có cùng một tên phương thức.
D. Biến đổi kiểu dữ liệu của một đối tượng thành một kiểu khác.
11. Trong lập trình, "biểu thức" (expression) là gì?
A. Một câu lệnh hoàn chỉnh kết thúc bằng dấu chấm phẩy.
B. Một tổ hợp các toán tử, toán hạng và các lời gọi hàm, mà khi được đánh giá sẽ cho ra một giá trị duy nhất.
C. Một định nghĩa về một hàm mới.
D. Một khối mã được thực thi khi một điều kiện nhất định được đáp ứng.
12. Phát biểu nào sau đây mô tả chính xác "cấu trúc điều khiển" trong lập trình?
A. Là cách tổ chức dữ liệu thành các cấu trúc phức tạp hơn.
B. Là các câu lệnh cho phép thay đổi thứ tự thực thi của các câu lệnh khác.
C. Là các hàm hoặc phương thức được định nghĩa sẵn trong ngôn ngữ lập trình.
D. Là các quy tắc về cú pháp để viết mã nguồn.
13. Đâu là đặc điểm quan trọng nhất của một thuật toán hiệu quả?
A. Sử dụng ít bộ nhớ nhất có thể.
B. Có khả năng tự sửa lỗi khi gặp vấn đề.
C. Có thời gian thực thi và sử dụng tài nguyên tối thiểu.
D. Dễ dàng đọc và hiểu bởi người mới bắt đầu lập trình.
14. Khi lập trình, tại sao chúng ta cần "chuỗi" (string) như một kiểu dữ liệu?
A. Để thực hiện các phép toán số học phức tạp.
B. Để biểu diễn và thao tác với văn bản, chữ cái và các ký tự.
C. Để lưu trữ các giá trị đúng/sai.
D. Để biểu diễn các số có dấu phẩy động.
15. Lỗi "runtime error" (lỗi trong quá trình chạy) xảy ra khi nào?
A. Khi trình biên dịch không thể chuyển đổi mã nguồn sang mã máy.
B. Khi chương trình đang thực thi gặp phải một điều kiện không mong muốn hoặc không thể xử lý.
C. Khi mã nguồn có lỗi chính tả trong tên biến.
D. Khi chương trình không được lưu lại trước khi chạy.
16. Trong lập trình, "debug" là quá trình gì?
A. Viết các tài liệu hướng dẫn sử dụng chương trình.
B. Tìm kiếm và sửa lỗi (bug) trong mã nguồn.
C. Thiết kế giao diện người dùng cho ứng dụng.
D. Tối ưu hóa tốc độ thực thi của chương trình.
17. Tại sao "kiểm thử đơn vị" (unit testing) lại quan trọng trong phát triển phần mềm?
A. Để đảm bảo chương trình có giao diện người dùng đẹp mắt.
B. Để xác minh rằng từng phần nhỏ nhất của mã nguồn (đơn vị) hoạt động chính xác như mong đợi.
C. Để viết tài liệu hướng dẫn sử dụng chi tiết.
D. Để tối ưu hóa việc sử dụng bộ nhớ của chương trình.
18. Trong khoa học máy tính, khái niệm "thuật toán" được hiểu như thế nào là chính xác nhất?
A. Một chuỗi các lệnh máy tính được viết bằng ngôn ngữ lập trình cụ thể.
B. Một tập hợp các bước hữu hạn, có thứ tự và được xác định rõ ràng để giải quyết một vấn đề hoặc thực hiện một nhiệm vụ.
C. Một phương pháp để lưu trữ và truy xuất dữ liệu hiệu quả trong bộ nhớ máy tính.
D. Một chương trình máy tính được biên dịch sẵn sàng để thực thi.
19. Khái niệm "đa hình" (polymorphism) trong OOP cho phép điều gì?
A. Một lớp có thể có nhiều constructor khác nhau.
B. Các đối tượng khác nhau có thể 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ể kế thừa từ nhiều lớp cha.
D. Cho phép truy cập dữ liệu từ bất kỳ đâu trong chương trình.
20. Khi nói đến "lập trình hướng đối tượng" (OOP), khái niệm nào sau đây là cốt lõi?
A. Tập trung vào các thuật toán và cấu trúc dữ liệu.
B. Tổ chức mã nguồn thành các "đối tượng" chứa dữ liệu (thuộc tính) và hành vi (phương thức).
C. Sử dụng các câu lệnh điều kiện để kiểm soát luồng chương trình.
D. Chủ yếu dùng cho việc thiết kế giao diện đồ họa người dùng.
21. Đâu là lợi ích chính của "kế thừa" (inheritance) trong lập trình hướng đối tượng?
A. Tăng cường tính bảo mật của dữ liệu.
B. Cho phép tái sử dụng mã nguồn bằng cách tạo ra các lớp mới dựa trên các lớp đã có.
C. Giúp chương trình chạy nhanh hơn bằng cách giảm số lượng câu lệnh.
D. Tạo ra giao diện người dùng tương tác hơn.
22. Trong quy trình phát triển phần mềm, giai đoạn nào thường tập trung vào việc thiết kế kiến trúc và chi tiết của hệ thống?
A. Giai đoạn Yêu cầu.
B. Giai đoạn Thiết kế.
C. Giai đoạn Kiểm thử.
D. Giai đoạn Triển khai.
23. Biểu đồ lớp (Class Diagram) trong UML (Unified Modeling Language) dùng để làm gì?
A. Biểu diễn luồng dữ liệu trong một quy trình.
B. Mô tả cấu trúc tĩnh của hệ thống, bao gồm các lớp, thuộc tính, phương thức và mối quan hệ giữa chúng.
C. Theo dõi tiến trình thực hiện của một thuật toán.
D. Biểu diễn các trạng thái có thể có của một đối tượng.
24. Tại sao việc phân tích yêu cầu trước khi lập trình lại quan trọng?
A. Để làm cho mã nguồn trông chuyên nghiệp hơn.
B. Để đảm bảo sản phẩm cuối cùng đáp ứng đúng nhu cầu và mong muốn của người dùng.
C. Để giảm thiểu số lượng lỗi cú pháp trong mã.
D. Để lựa chọn ngôn ngữ lập trình phù hợp nhất.
25. Khái niệm "tái cấu trúc mã" (refactoring) trong lập trình là gì?
A. Viết lại toàn bộ chương trình từ đầu.
B. Thay đổi cấu trúc bên trong của mã nguồn mà không làm thay đổi chức năng bên ngoài của nó, nhằm cải thiện tính đọc hiểu và bảo trì.
C. Thêm các tính năng mới vào chương trình.
D. Chỉ tập trung vào việc sửa lỗi.