1. Tại sao việc đặt tên biến có ý nghĩa và tuân thủ quy ước lại quan trọng trong lập trình?
A. Giúp mã nguồn dễ đọc, dễ hiểu và dễ bảo trì hơn cho lập trình viên.
B. Tăng tốc độ thực thi của chương trình.
C. Ngăn chặn lỗi cú pháp một cách tự động.
D. Giảm dung lượng bộ nhớ mà chương trình sử dụng.
2. Phát biểu nào sau đây mô tả đúng về ‘loop termination condition’ (điều kiện kết thúc vòng lặp)?
A. Là điều kiện mà khi nó trở thành đúng (hoặc sai, tùy thuộc vào loại vòng lặp) sẽ khiến vòng lặp dừng lại.
B. Là điều kiện để bắt đầu thực hiện vòng lặp.
C. Là số lần tối đa mà vòng lặp có thể chạy.
D. Là điều kiện để kiểm tra sự hợp lệ của biến đếm.
3. Trong các cấu trúc điều khiển luồng, ‘if-else’ statement (câu lệnh nếu-thì-khác) được sử dụng để làm gì?
A. Thực hiện các khối mã khác nhau dựa trên việc kiểm tra một điều kiện logic.
B. Lặp lại một khối mã cho đến khi một điều kiện nhất định trở thành sai.
C. Khởi tạo và cập nhật một biến trong một phạm vi nhất định.
D. Tổ chức các trường hợp kiểm tra cho một biến duy nhất.
4. Trong lập trình, ‘compiler optimization’ (tối ưu hóa trình biên dịch) nhằm mục đích gì?
A. Làm cho mã máy được tạo ra chạy nhanh hơn hoặc sử dụng ít tài nguyên hơn.
B. Thêm nhiều tính năng mới vào chương trình.
C. Tìm kiếm các lỗi logic trong mã nguồn.
D. Tự động hóa quá trình viết tài liệu.
5. Phát biểu nào sau đây mô tả chính xác mục đích của ‘compiler’ (trình biên dịch)?
A. Chuyển đổi mã nguồn viết bằng ngôn ngữ lập trình bậc cao thành mã máy hoặc mã trung gian mà máy tính có thể hiểu.
B. Chạy trực tiếp mã nguồn để thực thi chương trình.
C. Tự động tìm và sửa lỗi cú pháp trong mã.
D. Quản lý bộ nhớ cho chương trình đang chạy.
6. Phát biểu nào sau đây mô tả đúng nhất ‘syntax’ (cú pháp) trong ngôn ngữ lập trình?
A. Các quy tắc xác định cách kết hợp các từ khóa, ký tự và biểu tượng để tạo thành các câu lệnh hợp lệ.
B. Các bước logic để giải quyết một vấn đề.
C. Cách tổ chức dữ liệu trong bộ nhớ.
D. Tập hợp các hàm và thư viện có sẵn.
7. Trong lập trình, một ‘variable’ (biến) được sử dụng để làm gì?
A. Lưu trữ dữ liệu hoặc giá trị cụ thể mà chương trình có thể truy cập và thay đổi.
B. Định nghĩa cấu trúc của một lớp đối tượng để tái sử dụng.
C. Thực thi một chuỗi các lệnh theo một trình tự nhất định.
D. Kiểm tra một điều kiện logic để quyết định luồng thực thi.
8. Khi một chương trình bị ‘crash’ (sập), điều đó thường có nghĩa là gì?
A. Chương trình đột ngột dừng hoạt động và có thể hiển thị thông báo lỗi.
B. Chương trình chạy chậm hơn bình thường.
C. Chương trình không lưu lại kết quả công việc.
D. Chương trình hiển thị giao diện sai.
9. Một ‘comment’ (chú thích) trong mã nguồn được sử dụng để làm gì?
A. Cung cấp giải thích về mã cho con người đọc, không ảnh hưởng đến quá trình biên dịch/thông dịch.
B. Thực thi một lệnh đặc biệt trong chương trình.
C. Định nghĩa một biến mới.
D. Báo lỗi cho trình biên dịch.
10. Trong lập trình, ‘string’ (chuỗi) là một kiểu dữ liệu dùng để biểu diễn gì?
A. Một chuỗi các ký tự, thường dùng để biểu diễn văn bản.
B. Một số nguyên có thể có dấu.
C. Một giá trị chỉ có thể là đúng hoặc sai.
D. Một danh sách các số có thể có phần thập phân.
11. Trong lập trình hướng đối tượng, ‘object’ (đối tượng) là một thể hiện của lớp nào?
A. Là một thể hiện cụ thể của một ‘class’ (lớp), chứa cả dữ liệu (thuộc tính) và hành vi (phương thức).
B. Là một khuôn mẫu chung định nghĩa các thuộc tính và phương thức.
C. Là một biến lưu trữ một giá trị duy nhất.
D. Là một tập hợp các hàm liên quan đến nhau.
12. Trong lập trình, một ‘statement’ (câu lệnh) là gì?
A. Một đơn vị thực thi nhỏ nhất trong chương trình, biểu thị một hành động hoặc một thao tác.
B. Một khối mã bao gồm nhiều câu lệnh.
C. Một biến lưu trữ dữ liệu.
D. Một cách để định nghĩa cấu trúc dữ liệu.
13. Khái niệm ‘algorithm’ (thuật toán) trong khoa học máy tính đề cập đến điều gì?
A. Một tập hợp các bước hoặc quy tắc rõ ràng, hữu hạn để giải quyết một vấn đề hoặc thực hiện một nhiệm vụ.
B. Cấu trúc dữ liệu được sử dụng để lưu trữ thông tin.
C. Ngôn ngữ được sử dụng để viết mã.
D. Phần cứng của máy tính.
14. Khái niệm ‘object-oriented programming’ (lập trình hướng đối tượng – OOP) tập trung vào việc tổ chức mã xung quanh các ‘objects’ (đối tượng). Phương thức nào sau đây là một đặc điểm cốt lõi của OOP?
A. Đóng gói (Encapsulation).
B. Vòng lặp vô hạn (Infinite loop).
C. Lỗi cú pháp (Syntax error).
D. Biến toàn cục (Global variable).
15. Trong lập trình, ‘debugging’ (gỡ lỗi) là quá trình gì?
A. Tìm kiếm, xác định và sửa chữa các lỗi (bug) trong mã nguồn.
B. Viết mã mới cho một chức năng.
C. Tối ưu hóa hiệu suất của chương trình.
D. Thiết kế giao diện người dùng.
16. Phát biểu nào sau đây mô tả đúng nhất vai trò của ‘interpreter’ (trình thông dịch)?
A. Đọc và thực thi mã nguồn từng câu lệnh một, mà không cần biên dịch toàn bộ trước.
B. Chuyển đổi toàn bộ mã nguồn sang mã máy trước khi thực thi.
C. Phát hiện và sửa lỗi cú pháp một cách tự động.
D. Quản lý các tiến trình của hệ điều hành.
17. Trong lập trình, ‘variable scope’ (phạm vi của biến) xác định điều gì?
A. Nơi trong chương trình mà biến đó có thể được truy cập và sử dụng.
B. Giá trị ban đầu của biến.
C. Kiểu dữ liệu mà biến có thể lưu trữ.
D. Thời gian tồn tại của biến trong bộ nhớ.
18. Tại sao việc sử dụng ‘libraries’ (thư viện) lại phổ biến trong lập trình?
A. Để tái sử dụng các chức năng đã được lập trình sẵn, tiết kiệm thời gian và công sức.
B. Để làm cho chương trình chạy chậm hơn.
C. Để tăng số lượng lỗi cú pháp.
D. Để chỉ có thể chạy chương trình trên một hệ điều hành nhất định.
19. Khái niệm ‘recursion’ (đệ quy) trong lập trình là gì?
A. Một hàm tự gọi lại chính nó để giải quyết bài toán.
B. Một vòng lặp chạy vô hạn.
C. Một cấu trúc dữ liệu lưu trữ các phần tử theo cặp.
D. Một cách để kiểm tra nhiều điều kiện cùng lúc.
20. Trong lập trình, một ‘array’ (mảng) là gì?
A. Một tập hợp các phần tử cùng kiểu dữ liệu, được truy cập thông qua một chỉ số (index).
B. Một biến có thể lưu trữ nhiều loại dữ liệu khác nhau.
C. Một cấu trúc dữ liệu dùng để lưu trữ theo cặp khóa-giá trị.
D. Một hàm thực hiện một tác vụ cụ thể.
21. Phát biểu nào sau đây mô tả đúng nhất vai trò của ‘API’ (Application Programming Interface – Giao diện Lập trình Ứng dụng)?
A. Là một bộ các quy tắc và định nghĩa cho phép các ứng dụng phần mềm khác nhau giao tiếp và tương tác với nhau.
B. Là một thiết bị phần cứng.
C. Là một loại thuật toán sắp xếp dữ liệu.
D. Là một hệ điều hành.
22. Phát biểu nào sau đây mô tả đúng nhất ‘data structure’ (cấu trúc dữ liệu)?
A. Một cách tổ chức và lưu trữ dữ liệu trong máy tính để có thể truy cập và xử lý hiệu quả.
B. Một ngôn ngữ lập trình.
C. Một thuật toán tìm kiếm.
D. Một hệ thống quản lý cơ sở dữ liệu.
23. Trong lập trình, ‘runtime error’ (lỗi thời gian chạy) xảy ra khi nào?
A. Khi chương trình đang chạy và gặp phải một tình huống bất thường không thể xử lý.
B. Khi mã nguồn có lỗi cú pháp.
C. Khi quá trình biên dịch thất bại.
D. Khi chương trình không được khởi tạo đúng cách.
24. Khi một chương trình máy tính thực thi, ‘syntax error’ (lỗi cú pháp) thường xảy ra do nguyên nhân nào?
A. Vi phạm các quy tắc về ngữ pháp của ngôn ngữ lập trình.
B. Logic chương trình không đúng, dẫn đến kết quả sai.
C. Chương trình cố gắng truy cập vào vùng nhớ không hợp lệ.
D. Thiếu bộ nhớ RAM để chạy chương trình.
25. Trong lập trình, khi một hàm nhận các giá trị đầu vào, các giá trị này được gọi là gì?
A. Tham số (Arguments/Parameters).
B. Biến (Variables).
C. Hằng số (Constants).
D. Kiểu dữ liệu (Data types).
26. Trong lập trình, ‘polymorphism’ (tính đa hình) là một nguyên lý cho phép gì?
A. Các đối tượng thuộc các lớp khác nhau có thể phản ứng với cùng một thông điệp (lời gọi hàm) theo cách riêng của chúng.
B. Một lớp kế thừa tất cả các thuộc tính từ lớp cha.
C. Dữ liệu và các phương thức liên quan được đóng gói trong một lớp.
D. Chương trình có thể chạy trên nhiều hệ điều hành.
27. Một ‘loop’ (vòng lặp) trong lập trình được thiết kế để thực hiện chức năng gì?
A. Lặp đi lặp lại một khối mã cho đến khi điều kiện dừng được thỏa mãn.
B. Định nghĩa một tập hợp các giá trị có thể được truy cập bằng chỉ số.
C. Kiểm tra tính đúng đắn của một biểu thức logic.
D. Tạo ra các đối tượng mới từ một bản thiết kế có sẵn.
28. Phát biểu nào sau đây mô tả đúng nhất khái niệm ‘function’ (hàm) trong lập trình?
A. Một khối mã được đặt tên, có thể nhận đầu vào, thực hiện một nhiệm vụ cụ thể và có thể trả về kết quả.
B. Một cấu trúc dữ liệu dùng để lưu trữ nhiều giá trị cùng loại.
C. Một câu lệnh điều kiện kiểm tra sự đúng sai của một biểu thức.
D. Một vòng lặp để thực hiện một khối mã nhiều lần.
29. Khi nói về ‘data types’ (kiểu dữ liệu) trong lập trình, ví dụ nào sau đây không phải là kiểu dữ liệu cơ bản?
A. Một danh sách các chuỗi ký tự được phân tách bằng dấu phẩy.
B. Số nguyên (integer).
C. Số thực (floating-point number).
D. Kiểu Boolean (true/false).
30. Trong phát triển phần mềm, ‘IDE’ (Integrated Development Environment – Môi trường Phát triển Tích hợp) thường bao gồm những thành phần nào?
A. Trình soạn thảo mã nguồn, trình biên dịch/thông dịch, trình gỡ lỗi và các công cụ quản lý dự án.
B. Chỉ trình soạn thảo mã nguồn.
C. Chỉ trình biên dịch.
D. Chỉ trình quản lý mạng.
31. Phát biểu nào sau đây mô tả đúng về ‘cấu trúc dữ liệu ngăn xếp’ (stack)?
A. Hoạt động theo nguyên tắc ‘vào sau, ra trước’ (LIFO – Last In, First Out).
B. Hoạt động theo nguyên tắc ‘vào trước, ra trước’ (FIFO – First In, First Out).
C. Cho phép truy cập ngẫu nhiên đến mọi phần tử.
D. Không có thứ tự cụ thể cho các phần tử.
32. Trong cấu trúc điều khiển ‘switch-case’ (hoặc tương tự), mục đích của từ khóa ‘break’ là gì?
A. Để thoát khỏi cấu trúc ‘switch’ sau khi tìm thấy trường hợp khớp.
B. Để chuyển sang trường hợp tiếp theo.
C. Để bắt đầu một trường hợp mới.
D. Để khai báo một biến mới.
33. Vòng lặp ‘for’ trong lập trình thường được sử dụng khi nào?
A. Khi số lần lặp đã biết trước hoặc có thể xác định được một cách rõ ràng.
B. Khi điều kiện lặp phụ thuộc vào một biến chưa được khởi tạo.
C. Khi cần thực hiện một hành động chỉ một lần duy nhất.
D. Khi không biết chắc chắn khi nào vòng lặp sẽ kết thúc.
34. Trong ngôn ngữ lập trình C, thư viện chuẩn nào thường được bao gồm để sử dụng các hàm nhập/xuất như ‘printf’ và ‘scanf’?
35. Trong ngôn ngữ C, việc sử dụng hàm ‘scanf()’ thường đi kèm với biểu thức định dạng (format specifier) nào để đọc một số nguyên?
36. Trong lập trình, ‘thuật toán’ (algorithm) là gì?
A. Là một tập hợp 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ụ.
B. Là một chương trình máy tính hoàn chỉnh.
C. Là một loại biến đặc biệt.
D. Là một cách để viết chú thích.
37. Phát biểu nào sau đây mô tả đúng nhất về ‘kiểu dữ liệu ký tự’ (char) trong lập trình?
A. Là kiểu dữ liệu dùng để lưu trữ một ký tự đơn, thường được bao bọc bởi dấu nháy đơn.
B. Là kiểu dữ liệu dùng để lưu trữ một chuỗi ký tự.
C. Là kiểu dữ liệu dùng để lưu trữ số nguyên.
D. Là kiểu dữ liệu dùng để lưu trữ số thực.
38. Phát biểu nào sau đây mô tả đúng về ‘kiểu dữ liệu chuỗi’ (string) trong lập trình?
A. Là một dãy các ký tự được bao bọc bởi dấu nháy kép hoặc nháy đơn.
B. Chỉ có thể chứa các ký tự số.
C. Là một kiểu dữ liệu chỉ dùng cho các phép toán số học.
D. Là một biến chỉ lưu trữ được một ký tự duy nhất.
39. Câu lệnh nào sau đây trong ngôn ngữ C sẽ in ra màn hình dòng chữ ‘Hello, World!’?
A. printf(“Hello, World!”);
B. print(“Hello, World!”);
C. echo(“Hello, World!”);
D. display(“Hello, World!”);
40. Phát biểu nào sau đây là đúng về ‘mảng một chiều’ (one-dimensional array) trong lập trình?
A. Là một tập hợp các phần tử cùng kiểu dữ liệu, được lưu trữ liên tiếp trong bộ nhớ và truy cập thông qua một chỉ số duy nhất.
B. Là một tập hợp các phần tử có kiểu dữ liệu khác nhau.
C. Là một cấu trúc dữ liệu chỉ chứa một phần tử duy nhất.
D. Là một tập hợp các phần tử không có thứ tự cụ thể.
41. Khi lập trình, mục đích chính của việc sử dụng ‘cấu trúc lặp’ (loops) là gì?
A. Thực hiện lặp đi lặp lại một khối lệnh cho đến khi đạt một điều kiện nhất định.
B. Thực hiện một khối lệnh duy nhất một lần.
C. Tự động phân tích và sửa lỗi trong mã nguồn.
D. Chia chương trình thành các module nhỏ.
42. Trong cấu trúc điều khiển ‘if-else’ của nhiều ngôn ngữ lập trình, khối lệnh nào sẽ được thực thi nếu điều kiện trong ‘if’ là sai và có một khối ‘else’ đi kèm?
A. Khối lệnh trong ‘else’.
B. Khối lệnh trong ‘if’.
C. Không có khối lệnh nào được thực thi.
D. Chương trình sẽ bị dừng lại.
43. Trong ngôn ngữ lập trình C, toán tử ‘==’ được sử dụng để làm gì?
A. So sánh hai giá trị xem có bằng nhau hay không.
B. Gán một giá trị cho biến.
C. Thực hiện phép cộng hai số.
D. Kiểm tra điều kiện lớn hơn hoặc bằng.
44. Trong ngôn ngữ lập trình C, toán tử ‘=’ có chức năng gì?
A. Toán tử gán, dùng để gán giá trị của biểu thức bên phải cho biến ở bên trái.
B. Toán tử so sánh, kiểm tra hai giá trị có bằng nhau không.
C. Toán tử số học, thực hiện phép cộng.
D. Toán tử logic, kết hợp hai điều kiện.
45. Trong lập trình, ‘hàm’ (function) hay ‘thủ tục’ (procedure) được sử dụng để làm gì?
A. Chia nhỏ chương trình thành các khối lệnh có thể tái sử dụng, giúp dễ quản lý và đọc hiểu.
B. Tăng tốc độ xử lý của chương trình bằng cách loại bỏ các biến.
C. Chỉ dùng để khai báo biến và hằng số.
D. Tự động sửa lỗi cú pháp trong chương trình.
46. Trong lập trình, ‘toán tử logic’ (logical operators) được sử dụng để làm gì?
A. Kết hợp hoặc phủ định các biểu thức điều kiện.
B. Thực hiện các phép tính số học phức tạp.
C. Gán giá trị cho biến.
D. Định nghĩa các hàm mới.
47. Phát biểu nào sau đây mô tả đúng về ‘cấu trúc dữ liệu danh sách liên kết’ (linked list) so với mảng?
A. Danh sách liên kết cho phép chèn hoặc xóa phần tử hiệu quả hơn ở giữa danh sách, không cần dịch chuyển các phần tử khác như mảng.
B. Mảng hiệu quả hơn trong việc truy cập ngẫu nhiên đến bất kỳ phần tử nào.
C. Danh sách liên kết luôn chiếm ít bộ nhớ hơn mảng.
D. Cả hai đều có cấu trúc lưu trữ dữ liệu liên tiếp trong bộ nhớ.
48. Trong lập trình, ‘biến’ (variable) là gì?
A. Là một định danh (tên) đại diện cho một vùng nhớ có thể chứa dữ liệu và giá trị của nó có thể thay đổi trong quá trình thực thi chương trình.
B. Là một giá trị cố định không bao giờ thay đổi.
C. Là một hàm thực hiện một phép tính cụ thể.
D. Là một loại chú thích trong mã nguồn.
49. Phát biểu nào sau đây là đúng về việc sử dụng ‘chú thích’ (comments) trong mã nguồn?
A. Giúp giải thích mục đích của các khối mã, làm cho mã nguồn dễ đọc và dễ hiểu hơn cho người khác và cho chính mình sau này.
B. Là bắt buộc để chương trình có thể chạy.
C. Tăng tốc độ thực thi của chương trình.
D. Là nơi để viết các câu lệnh điều khiển.
50. Phát biểu nào sau đây mô tả đúng nhất về ‘hằng số’ (constant) trong lập trình?
A. Là một giá trị không thay đổi trong suốt quá trình thực thi chương trình.
B. Là một biến có thể thay đổi giá trị bất kỳ lúc nào.
C. Là một hàm dùng để tính toán một giá trị cố định.
D. Là một kiểu dữ liệu đặc biệt chỉ dùng cho số thực.
51. Phát biểu nào sau đây mô tả đúng về ‘kiểu dữ liệu mảng động’ (dynamic array) hoặc ‘vector’ (trong C++)?
A. Có khả năng thay đổi kích thước trong quá trình chạy chương trình, không bị giới hạn bởi kích thước khai báo ban đầu.
B. Luôn có kích thước cố định sau khi khai báo.
C. Chỉ có thể chứa các phần tử là số nguyên.
D. Không cho phép thêm hoặc xóa phần tử.
52. Trong lập trình, khái niệm ‘đệ quy’ (recursion) là gì?
A. Là một kỹ thuật trong đó một hàm tự gọi lại chính nó để giải quyết một bài toán nhỏ hơn.
B. Là một loại vòng lặp đặc biệt.
C. Là một cách để khai báo biến.
D. Là một phương pháp để kiểm tra lỗi cú pháp.
53. Phát biểu nào sau đây mô tả đúng về ‘kiểu dữ liệu boolean’ (boolean) trong lập trình?
A. Là kiểu dữ liệu chỉ có hai giá trị là ‘đúng’ (true) hoặc ‘sai’ (false).
B. Là kiểu dữ liệu dùng để lưu trữ số nguyên.
C. Là kiểu dữ liệu dùng để lưu trữ ký tự.
D. Là kiểu dữ liệu dùng để lưu trữ chuỗi ký tự.
54. Trong ngôn ngữ lập trình C, câu lệnh nào sau đây được sử dụng để khai báo một biến kiểu số nguyên có tên là ‘age’ và gán giá trị 25 cho biến đó?
A. int age = 25;
B. var age = 25;
C. real age = 25;
D. string age = “25”;
55. Phát biểu nào sau đây mô tả đúng về ‘con trỏ’ (pointer) trong ngôn ngữ lập trình C?
A. Là một biến lưu trữ địa chỉ của một biến khác trong bộ nhớ.
B. Là một biến lưu trữ giá trị của một biến khác.
C. Là một hàm dùng để tính toán.
D. Là một hằng số không thay đổi.
56. Khi sử dụng vòng lặp ‘while’, điều kiện dừng vòng lặp thường được kiểm tra ở đâu?
A. Trước mỗi lần lặp, ngay sau khi kiểm tra điều kiện.
B. Sau mỗi lần lặp, trước khi thực hiện lệnh tiếp theo.
C. Chỉ sau khi vòng lặp đã hoàn thành.
D. Không có kiểm tra điều kiện cụ thể, vòng lặp chạy vô hạn.
57. Phát biểu nào sau đây mô tả đúng về ‘kiểu dữ liệu số thực’ (float hoặc double) trong lập trình?
A. Là kiểu dữ liệu dùng để lưu trữ các số có phần thập phân.
B. Là kiểu dữ liệu dùng để lưu trữ các số nguyên.
C. Là kiểu dữ liệu chỉ dùng cho các ký tự.
D. Là kiểu dữ liệu dùng để lưu trữ chuỗi văn bản.
58. Trong lập trình hướng đối tượng (OOP), ‘tính đóng gói’ (encapsulation) có nghĩa là gì?
A. Kết hợp dữ liệu (thuộc tính) và các phương thức (hàm) xử lý dữ liệu đó vào trong một đơn vị duy nhất (đối tượng), đồng thời ẩn đi các chi tiết triển khai bên trong.
B. Cho phép một lớp kế thừa thuộc tính và phương thức từ nhiều lớp khác.
C. Biểu diễn các đối tượng trong thế giới thực dưới dạng mã lệnh.
D. Khả năng một đối tượng có thể có nhiều hình dạng khác nhau.
59. Phát biểu nào sau đây mô tả đúng về ‘cấu trúc dữ liệu hàng đợi’ (queue)?
A. Hoạt động theo nguyên tắc ‘vào trước, ra trước’ (FIFO – First In, First Out).
B. Hoạt động theo nguyên tắc ‘vào sau, ra trước’ (LIFO – Last In, First Out).
C. Chỉ cho phép thêm phần tử, không cho phép bớt.
D. Các phần tử được sắp xếp ngẫu nhiên.
60. Phát biểu nào sau đây mô tả đúng về ‘mảng hai chiều’ (two-dimensional array) trong lập trình?
A. Là một cấu trúc dữ liệu tương tự như một bảng hoặc ma trận, có thể truy cập phần tử thông qua hai chỉ số (hàng và cột).
B. Là một tập hợp các biến có tên khác nhau.
C. Là một cấu trúc dữ liệu chỉ có thể chứa một hàng.
D. Là một kiểu dữ liệu dùng để lưu trữ hình ảnh.
61. Phát biểu nào sau đây mô tả đúng về vòng lặp ‘for’ trong Python?
A. Vòng lặp ‘for’ được sử dụng khi số lần lặp không xác định trước.
B. Vòng lặp ‘for’ lặp qua một chuỗi các mục (ví dụ: danh sách, tuple, chuỗi ký tự, hoặc range).
C. Vòng lặp ‘for’ yêu cầu một điều kiện dừng rõ ràng bên trong thân vòng lặp.
D. Vòng lặp ‘for’ chỉ có thể lặp qua các số nguyên.
62. Trong Python, câu lệnh nào dùng để in một dòng văn bản ra màn hình?
A. display(‘Xin chào’)
B. output(‘Xin chào’)
C. print(‘Xin chào’)
D. write(‘Xin chào’)
63. Trong Python, làm thế nào để truy cập một phương thức hoặc thuộc tính của lớp cha từ bên trong một lớp con?
A. parent.method()
B. super().method()
C. self.parent.method()
D. child.method()
64. Phát biểu nào sau đây đúng về cách Python xử lý lỗi (error handling)?
A. Python chỉ có thể xử lý lỗi cú pháp.
B. Python sử dụng khối ‘try-except’ để bắt và xử lý các ngoại lệ (exceptions).
C. Lỗi trong Python luôn dẫn đến việc chương trình dừng đột ngột.
D. Không có cơ chế xử lý lỗi trong Python.
65. Phát biểu nào sau đây mô tả đúng về cách Python xử lý chuỗi ký tự?
A. Chuỗi ký tự có thể thay đổi (mutable).
B. Chuỗi ký tự là bất biến (immutable).
C. Chuỗi ký tự không thể truy cập bằng chỉ số.
D. Python không hỗ trợ các thao tác trên chuỗi ký tự.
66. Hàm nào trong Python được dùng để lấy độ dài (số lượng phần tử) của một chuỗi hoặc danh sách?
A. size()
B. length()
C. count()
D. len()
67. Phát biểu nào sau đây mô tả đúng về kế thừa (inheritance) trong Python?
A. Kế thừa cho phép một lớp mới (lớp con) nhận thuộc tính và phương thức từ một lớp đã có (lớp cha).
B. Kế thừa chỉ áp dụng cho các thuộc tính, không áp dụng cho phương thức.
C. Lớp cha không thể truy cập các thuộc tính của lớp con.
D. Mỗi lớp chỉ có thể kế thừa từ một lớp duy nhất, không hỗ trợ đa kế thừa.
68. Trong Python, làm thế nào để mở một tệp tin có tên ‘data.txt’ ở chế độ chỉ đọc?
A. file = open(‘data.txt’, ‘w’)
B. file = open(‘data.txt’, ‘r’)
C. file = open(‘data.txt’, ‘a’)
D. file = open(‘data.txt’, ‘x’)
69. Câu lệnh nào trong Python được sử dụng để bỏ qua phần còn lại của vòng lặp hiện tại và tiếp tục với lần lặp tiếp theo?
A. break
B. exit
C. return
D. continue
70. Đâu là cách tạo một dictionary rỗng trong Python?
A. new dict()
B. dict()
C. {}
D. Both B and C
71. Trong Python, làm thế nào để nhận một đầu vào từ người dùng qua bàn phím?
A. get(‘Nhập dữ liệu:’)
B. scan(‘Nhập dữ liệu:’)
C. input(‘Nhập dữ liệu:’)
D. read(‘Nhập dữ liệu:’)
72. Trong Python, làm thế nào để tạo một hàm nhận hai tham số và trả về tổng của chúng?
A. def tinh_tong(a, b):
return a + b
B. function tinh_tong(a, b)
{
return a + b
}
C. def tinh_tong(a, b)
print(a + b)
D. def tinh_tong(a, b)
result = a + b
73. Trong Python, làm thế nào để truy cập phần tử đầu tiên của một danh sách có tên là ‘my_list’?
A. my_list(0)
B. my_list[1]
C. my_list[0]
D. my_list.first()
74. Sau khi làm việc với tệp tin, phát biểu nào sau đây là quan trọng nhất?
A. Luôn luôn đóng tệp tin sau khi sử dụng.
B. Chỉ đóng tệp tin khi có lỗi xảy ra.
C. Không cần đóng tệp tin nếu chương trình kết thúc.
D. Luôn mở tệp tin ở chế độ ghi.
75. Đâu là cách khai báo biến hợp lệ trong Python?
A. var so_luong = 10
B. int so_luong = 10;
C. so_luong = 10
D. so_luong: integer = 10
76. Phát biểu nào sau đây KHÔNG phải là đặc điểm của lập trình hướng đối tượng (OOP)?
A. Trừu tượng hóa (Abstraction)
B. Đóng gói (Encapsulation)
C. Thừa kế (Inheritance)
D. Lập trình tuyến tính (Linear Programming)
77. Phát biểu nào sau đây là đúng về cấu trúc dữ liệu ‘list’ trong Python?
A. List có thứ tự và cho phép trùng lặp các phần tử.
B. List không có thứ tự và không cho phép trùng lặp các phần tử.
C. List có thứ tự nhưng không cho phép trùng lặp các phần tử.
D. List không có thứ tự và cho phép trùng lặp các phần tử.
78. Phát biểu nào sau đây mô tả đúng về câu lệnh ‘if-elif-else’ trong Python?
A. Chỉ một khối lệnh duy nhất trong ‘if-elif-else’ được thực thi.
B. Tất cả các khối lệnh trong ‘if-elif-else’ đều được thực thi nếu điều kiện tương ứng là đúng.
C. ‘elif’ chỉ có thể xuất hiện sau ‘else’.
D. ‘else’ là bắt buộc phải có trong mọi cấu trúc ‘if-elif’.
79. Trong Python, toán tử nào được sử dụng để kiểm tra xem một phần tử có tồn tại trong một tập hợp hay không?
A. ==
B. is
C. in
D. contains
80. Trong Python, cách nào sau đây là cách tốt nhất để đảm bảo tệp tin luôn được đóng, ngay cả khi có lỗi xảy ra?
A. Sử dụng ‘try-finally’ để đóng tệp tin.
B. Sử dụng câu lệnh ‘with open(…)’
C. Gọi phương thức ‘close()’ ngay sau khi đọc xong.
D. Both A and B
81. Phát biểu nào sau đây đúng về module trong Python?
A. Module là các tệp tin chứa mã Python có thể được import và tái sử dụng.
B. Module chỉ chứa các biến, không chứa hàm hay lớp.
C. Mỗi chương trình Python chỉ được phép có một module.
D. Module là các tệp thực thi độc lập.
82. Trong Python, cú pháp nào dùng để import một module cụ thể từ một module khác?
A. import module_name.specific_item
B. from module_name import specific_item
C. get module_name.specific_item
D. include module_name: specific_item
83. Câu lệnh nào trong Python được sử dụng để kết thúc thực thi một vòng lặp ngay lập tức?
A. continue
B. pass
C. break
D. exit
84. Trong Python, làm thế nào để tạo một chuỗi ký tự rỗng?
A. new String()
B. ”
C. String()
D. None
85. Trong lập trình Python, cú pháp nào sau đây được sử dụng để khai báo một hàm?
A. function ten_ham():
B. void ten_ham() {
C. def ten_ham():
D. public void ten_ham() {
86. Phát biểu nào mô tả đúng về kiểu dữ liệu ‘dictionary’ (từ điển) trong Python?
A. Dictionary lưu trữ các cặp key-value, trong đó key phải là duy nhất và có thể thay đổi.
B. Dictionary lưu trữ các cặp key-value, trong đó key phải là duy nhất và không thể thay đổi (immutable).
C. Dictionary lưu trữ các cặp key-value, trong đó value phải là duy nhất và không thể thay đổi.
D. Dictionary lưu trữ các cặp key-value, trong đó cả key và value đều có thể trùng lặp và có thể thay đổi.
87. Kiểu dữ liệu nào trong Python được sử dụng để lưu trữ một tập hợp các phần tử không có thứ tự và không cho phép trùng lặp?
A. List
B. Tuple
C. Dictionary
D. Set
88. Phát biểu nào sau đây đúng về kiểu dữ liệu ‘tuple’ trong Python?
A. Tuple có thể thay đổi (mutable) và cho phép trùng lặp.
B. Tuple không có thứ tự và không cho phép trùng lặp.
C. Tuple có thứ tự và không thể thay đổi (immutable).
D. Tuple có thứ tự và có thể thay đổi.
89. Trong Python, phương thức ‘__init__’ của một lớp được sử dụng để làm gì?
A. Để hủy bỏ một đối tượng.
B. Để khởi tạo (khởi động) một đối tượng mới khi nó được tạo ra.
C. Để kế thừa thuộc tính từ lớp cha.
D. Để định nghĩa một phương thức tĩnh.
90. Phát biểu nào sau đây là đúng về các lớp (classes) và đối tượng (objects) trong lập trình hướng đối tượng (OOP) với Python?
A. Lớp là một bản thể cụ thể, còn đối tượng là bản thiết kế.
B. Đối tượng là một bản thể cụ thể được tạo ra từ lớp (bản thiết kế).
C. Lớp và đối tượng là hai khái niệm hoàn toàn độc lập.
D. Một lớp chỉ có thể tạo ra một đối tượng duy nhất.
91. Trong C++, khi định nghĩa một lớp, việc sử dụng `public`, `protected`, và `private` để kiểm soát quyền truy cập vào các thành viên của lớp thể hiện nguyên tắc nào?
A. Đa hình (Polymorphism)
B. Kế thừa (Inheritance)
C. Đóng gói (Encapsulation)
D. Trừu tượng hóa (Abstraction)
92. Khi một phương thức trong lớp con cung cấp một triển khai cụ thể cho một phương thức đã được khai báo trong lớp cha, đây là ví dụ của hiện tượng nào trong lập trình hướng đối tượng?
A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Kế thừa (Inheritance)
D. Ghi đè phương thức (Method Overriding)
93. Trong lập trình hướng đối tượng, việc sử dụng một lớp con để định nghĩa các phương thức cụ thể hơn cho một phương thức đã được định nghĩa trong lớp cha được gọi là gì?
A. Nạp chồng phương thức (Method Overloading)
B. Trừu tượng hóa (Abstraction)
C. Đóng gói (Encapsulation)
D. Ghi đè phương thức (Method Overriding)
94. Trong lập trình hướng đối tượng, một ‘class’ có thể được xem như là gì?
A. Một thực thể cụ thể của một đố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 biến lưu trữ dữ liệu.
D. Một hàm thực thi một tác vụ.
95. Khi hai lớp có cùng tên phương thức, cùng tham số và cùng kiểu trả về, nhưng thuộc hai lớp khác nhau và một lớp kế thừa từ lớp kia, thì phương thức ở lớp con sẽ che khuất phương thức ở lớp cha. Đây là hiện tượng gì?
A. Nạp chồng phương thức (Method Overloading)
B. Ghi đè phương thức (Method Overriding)
C. Đóng gói dữ liệu (Data Encapsulation)
D. Trừu tượng hóa (Abstraction)
96. Trong Java, khi sử dụng từ khóa ‘final’ cho một lớp, điều này có ý nghĩa gì?
A. Lớp đó không thể có bất kỳ trường (field) nào.
B. Các phương thức trong lớp đó không thể bị ghi đè.
C. Lớp đó không thể bị kế thừa bởi lớp khác.
D. Lớp đó chỉ có thể được khởi tạo một lần duy nhất.
97. Trong lập trình hướng đối tượng, ‘constructor’ (hàm tạo) của một lớp có chức năng chính là gì?
A. Thực thi các hành động sau khi đối tượng không còn sử dụng nữa.
B. Khởi tạo trạng thái ban đầu cho đối tượng khi nó được tạo ra.
C. Đảm bảo tính bảo mật cho các thuộc tính của lớp.
D. Cung cấp các phương thức công khai để truy cập dữ liệu.
98. Đâu là ví dụ về cách sử dụng đa hình (polymorphism) trong lập trình hướng đối tượng?
A. Một lớp chỉ có thể có một constructor.
B. Việc gọi cùng một phương thức trên các đối tượng thuộc các lớp khác nhau nhưng có cùng một lớp cha, và phương thức đó thực thi hành vi khác nhau tùy thuộc vào kiểu đối tượng thực tế.
C. Tất cả các thuộc tính của lớp đều phải là private.
D. Tạo ra một lớp trừu tượng không có phương thức nào.
99. Đâu là nguyên tắc cơ bản của lập trình hướng đối tượng mà nó cho phép một đối tượng có thể được xử lý như một đối tượng của lớp cha của nó?
A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Đa hình (Polymorphism)
D. Kế thừa (Inheritance)
100. Khái niệm nào trong lập trình hướng đối tượng liên quan đến việc nhóm dữ liệu (thuộc tính) và các phương thức xử lý dữ liệu đó vào cùng một đơn vị gọi là ‘đối tượng’?
A. Kế thừa (Inheritance)
B. Đóng gói (Encapsulation)
C. Đa hình (Polymorphism)
D. Trừu tượng hóa (Abstraction)
101. Trong lập trình hướng đối tượng, khái niệm nào giúp giảm thiểu sự phụ thuộc giữa các lớp, làm cho mã nguồn dễ dàng thay đổi và mở rộng hơn?
A. Đa hình (Polymorphism)
B. Trừu tượng hóa (Abstraction)
C. Đóng gói (Encapsulation)
D. Kế thừa (Inheritance)
102. Trong lập trình hướng đối tượng, một ‘phương thức’ (method) có vai trò gì?
A. Đại diện cho một thuộc tính của đối tượng.
B. Xác định mối quan hệ giữa hai lớp.
C. Thực hiện một hành động hoặc một phép toán mà đối tượng có thể làm.
D. Lưu trữ dữ liệu cố định cho lớp.
103. Việc ẩn giấu chi tiết triển khai và chỉ cho phép truy cập dữ liệu thông qua các phương thức công khai (public methods) của lớp được gọi là gì?
A. Trừu tượng hóa (Abstraction)
B. Đa hình (Polymorphism)
C. Đóng gói (Encapsulation)
D. Kế thừa (Inheritance)
104. Trong lập trình hướng đối tượng, ‘Object’ (đối tượng) là gì?
A. Một tập hợp các quy tắc và định nghĩa.
B. Một thể hiện cụ thể, có trạng thái (dữ liệu) và hành vi (phương thức) của một lớp.
C. Một từ khóa dùng để khai báo biến.
D. Một cấu trúc dữ liệu dùng để lưu trữ nhiều phần tử.
105. Nếu có một lớp `DongVat` với phương thức `speak()`, và hai lớp con là `Cho` và `Meo` đều ghi đè phương thức `speak()`. Nếu ta có một danh sách các đối tượng `DongVat` chứa cả đối tượng `Cho` và `Meo`, và gọi `speak()` trên từng đối tượng trong danh sách, hành vi nào sẽ xảy ra?
A. Tất cả các đối tượng sẽ phát ra âm thanh ‘Gâu gâu’.
B. Tất cả các đối tượng sẽ phát ra âm thanh ‘Meo meo’.
C. Các đối tượng `Cho` sẽ phát ra ‘Gâu gâu’, các đối tượng `Meo` sẽ phát ra ‘Meo meo’.
D. Chương trình sẽ báo lỗi vì không thể gọi phương thức trên danh sách các kiểu khác nhau.
106. Trong lập trình hướng đối tượng, ‘interface’ khác với ‘abstract class’ ở điểm nào sau đây?
A. Interface có thể chứa các biến thành viên (instance variables).
B. Interface chỉ có thể có một lần kế thừa, còn abstract class có thể có nhiều.
C. Interface chỉ chứa khai báo phương thức (và hằng số), không có triển khai (trừ các phương thức mặc định/tĩnh từ Java 8 trở đi), còn abstract class có thể có cả khai báo và triển khai.
D. Một lớp chỉ có thể kế thừa một abstract class, nhưng có thể triển khai nhiều interface.
107. Khái niệm nào cho phép các đối tượng khác nhau, mặc dù có thể có kiểu dữ liệu khác nhau, nhưng đều có thể được xử lý thông qua một giao diện chung?
A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)
108. Trong Python, khi một lớp kế thừa từ nhiều lớp cha, đây được gọi là kiểu kế thừa gì?
A. Kế thừa đơn (Single Inheritance)
B. Kế thừa đa hình (Polymorphic Inheritance)
C. Kế thừa đa tầng (Multilevel Inheritance)
D. Kế thừa đa (Multiple Inheritance)
109. Đâu là một ví dụ về ‘thuộc tính’ (attribute) của một đối tượng trong lập trình hướng đối tượng?
A. Hàm `tinhTong()` trong lớp `MayTinh`.
B. Biến `mauSac` của đối tượng `XeHoi`.
C. Phương thức `inThongTin()` của đối tượng `SinhVien`.
D. Lớp `ConNguoi`.
110. Đâu là lợi ích chính của việc sử dụng lớp trừu tượng (abstract class) trong lập trình hướng đối tượng?
A. Cho phép tạo đối tượng trực tiếp từ lớp trừu tượng.
B. Buộc các lớp con phải triển khai tất cả các phương thức trừu tượng.
C. Giúp ẩn giấu hoàn toàn dữ liệu của lớp.
D. Tạo ra các phương thức có thể truy cập từ mọi nơi mà không cần kế thừa.
111. Khi một lớp con ghi đè một phương thức của lớp cha, và trong phương thức ghi đè đó, nó gọi lại phương thức tương ứng của lớp cha bằng cách sử dụng từ khóa như ‘super’ (trong Java/Python) hoặc ‘base’ (trong C++), mục đích chính là gì?
A. Để hoàn toàn thay thế hành vi của phương thức lớp cha.
B. Để mở rộng hoặc bổ sung chức năng cho phương thức của lớp cha.
C. Để ẩn giấu hoàn toàn phương thức của lớp cha.
D. Để tăng cường bảo mật cho lớp cha.
112. Đâu là một ví dụ về ‘hành vi’ (behavior) của một đối tượng trong lập trình hướng đối tượng?
A. Biến `namSinh` của đối tượng `NhanVien`.
B. Lớp `PhuongTienGiaoThong`.
C. Phương thức `laiXe()` của đối tượng `XeHoi`.
D. Biến `soBanh` của đối tượng `XeDap`.
113. Một lớp có thể triển khai nhiều interface, nhưng chỉ có thể kế thừa một lớp cha duy nhất. Nguyên tắc này được gọi là gì?
A. Nguyên tắc đơn trách nhiệm (Single Responsibility Principle)
B. Nguyên tắc đa hình (Polymorphism Principle)
C. Nguyên tắc kế thừa đơn (Single Inheritance Principle) và đa kế thừa giao diện (Multiple Interface Inheritance)
D. Nguyên tắc đóng gói (Encapsulation Principle)
114. Khái niệm nào mô tả việc tạo ra các đối tượng có hành vi khác nhau dựa trên cùng một giao diện hoặc lớp cha, cho phép hệ thống linh hoạt hơn?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng hóa (Abstraction)
115. Khái niệm nào trong OOP tập trung vào việc định nghĩa các lớp và đối tượng dựa trên các đặc điểm và hành vi cốt lõi, bỏ qua các chi tiết không cần thiết?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng hóa (Abstraction)
116. Trong lập trình hướng đối tượng, khái niệm nào cho phép một lớp cha có thể sử dụng lại các thuộc tính và phương thức của lớp con?
A. Trừu tượng hóa (Abstraction)
B. Đóng gói (Encapsulation)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)
117. Nếu một lớp có các thuộc tính chỉ có thể truy cập từ bên trong chính lớp đó, đây là ứng dụng của nguyên tắc nào?
A. Đa hình (Polymorphism)
B. Trừu tượng hóa (Abstraction)
C. Kế thừa (Inheritance)
D. Đóng gói (Encapsulation)
118. Khi một lớp chỉ định nghĩa các phương thức trừu tượng và không có bất kỳ thuộc tính nào, nó thường được gọi là gì?
A. Lớp cụ thể (Concrete Class)
B. Lớp trừu tượng thuần túy (Pure Abstract Class) hoặc Interface.
C. Lớp cha (Superclass)
D. Lớp con (Subclass)
119. Khái niệm nào cho phép một phương thức có thể có nhiều phiên bản khác nhau với cùng tên nhưng khác nhau về danh sách tham số (số lượng, kiểu, thứ tự)?
A. Ghi đè phương thức (Method Overriding)
B. Đóng gói (Encapsulation)
C. Nạp chồng phương thức (Method Overloading)
D. Trừu tượng hóa (Abstraction)
120. Trong lập trình hướng đối tượng, việc tạo ra một lớp mới dựa trên một lớp đã tồn tại, kế thừa các thuộc tính và phương thức của nó, được gọi là gì?
A. Trừu tượng hóa (Abstraction)
B. Đóng gói (Encapsulation)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)
121. Đâu là một ví dụ về thuộc tính (attribute) của một lớp ‘XeHoi’?
A. Hành động ‘chạy’.
B. Màu sắc của xe.
C. Tiếng ‘bíp’ của còi.
D. Hành động ‘phanh’.
122. Trong mối quan hệ ‘has-a’ (có một) giữa hai lớp, ví dụ như một ‘XeHoi’ ‘có một’ ‘DongCo’, điều này thường được thể hiện bằng cách nào?
A. Lớp ‘XeHoi’ kế thừa từ lớp ‘DongCo’.
B. Lớp ‘XeHoi’ chứa một đối tượng của lớp ‘DongCo’ làm thuộc tính.
C. Lớp ‘DongCo’ chứa một đối tượng của lớp ‘XeHoi’ làm thuộc tính.
D. Cả hai lớp đều là lớp trừu tượng.
123. Khái niệm ‘Constructor’ trong một lớp có vai trò gì?
A. Để xóa đối tượng khỏi bộ nhớ.
B. Để khởi tạo trạng thái ban đầu cho đối tượng khi nó được tạo ra.
C. Để định nghĩa các phương thức công khai.
D. Để thực hiện các phép toán số học phức tạp.
124. Một giao diện (interface) trong lập trình hướng đối tượng khác với một lớp trừu tượng ở điểm nào?
A. Giao diện không thể chứa khai báo phương thức, chỉ có lớp trừu tượng.
B. Lớp có thể kế thừa nhiều giao diện, nhưng chỉ kế thừa một lớp.
C. Giao diện có thể khởi tạo đối tượng, còn lớp trừu tượng thì không.
D. Giao diện chỉ chứa các phương thức đã được định nghĩa đầy đủ.
125. Trong lập trình hướng đối tượng, phương thức ‘static’ (hoặc ‘class method’) thường được sử dụng cho mục đích gì?
A. Chỉ có thể gọi từ đối tượng cụ thể.
B. Thuộc về lớp chứ không thuộc về một đối tượng cụ thể nào.
C. Luôn luôn truy cập được dữ liệu riêng tư của lớp.
D. Bắt buộc phải được định nghĩa lại bởi lớp con.
126. Trong các ngôn ngữ lập trình hướng đối tượng hiện đại, đâu là cách phổ biến để định nghĩa một lớp?
A. Sử dụng từ khóa ‘function’.
B. Sử dụng từ khóa ‘class’ hoặc cú pháp tương tự.
C. Chỉ sử dụng các mảng và biến toàn cục.
D. Phải khai báo tất cả các đối tượng trước khi định nghĩa lớp.
127. Đâu là một lợi ích của việc sử dụng ‘protected’ (bảo vệ) cho các thuộc tính hoặc phương thức của một lớp?
A. Chỉ lớp đó và các lớp bạn mới truy cập được.
B. Chỉ lớp đó và các lớp kế thừa từ nó mới truy cập được.
C. Mọi lớp trong hệ thống đều truy cập được.
D. Không ai có thể truy cập được.
128. Theo phân tích phổ biến, một lớp trong lập trình hướng đối tượng có thể được xem như là:
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.
C. Một tập hợp các hàm độc lập.
D. Một biến lưu trữ dữ liệu.
129. Trong lập trình hướng đối tượng, ‘getter’ và ‘setter’ thường được sử dụng để:
A. Truy cập trực tiếp vào mọi thuộc tính của lớp.
B. Kiểm soát việc truy cập và thay đổi các thuộc tính của đối tượng.
C. Định nghĩa lại các phương thức kế thừa.
D. Thực hiện các thao tác I/O.
130. Theo các nguyên tắc về thiết kế hướng đối tượng, việc sử dụng lại mã nguồn thông qua kế thừa giúp:
A. Tăng độ phức tạp của mã nguồn.
B. Giảm thời gian phát triển và công sức lập trình.
C. Buộc phải viết lại toàn bộ mã nguồn.
D. Hạn chế khả năng mở rộng của hệ thống.
131. Trong các ngôn ngữ lập trình hướng đối tượng, việc một lớp được thiết kế để chỉ có thể tạo ra duy nhất một đối tượng được gọi là mẫu thiết kế gì?
A. Factory Pattern
B. Singleton Pattern
C. Observer Pattern
D. Decorator Pattern
132. Khi một lớp ‘ConCho’ kế thừa từ lớp ‘DongVat’, hành động ‘phát âm thanh’ có thể được định nghĩa lại trong lớp ‘ConCho’ như thế nào để thể hiện đa hình?
A. Lớp ‘ConCho’ không thể định nghĩa lại hành động ‘phát âm thanh’ nếu lớp ‘DongVat’ đã có.
B. Lớp ‘ConCho’ có thể định nghĩa lại phương thức ‘phát âm thanh’ để tạo ra tiếng ‘gâu gâu’ riêng.
C. Hành động ‘phát âm thanh’ của lớp ‘ConCho’ sẽ luôn giống hệt lớp ‘DongVat’.
D. Chỉ có thể gọi phương thức ‘phát âm thanh’ của lớp ‘DongVat’.
133. Tại sao việc sử dụng lập trình hướng đối tượng lại phổ biến trong phát triển phần mềm lớn?
A. Nó làm cho mã nguồn trở nên khó hiểu hơn.
B. Giúp tổ chức mã nguồn, dễ bảo trì và tái sử dụng.
C. Yêu cầu ít tài nguyên máy tính hơn so với lập trình thủ tục.
D. Chỉ phù hợp cho các ứng dụng nhỏ.
134. Khái niệm ‘lớp bạn’ (friend class) trong một số ngôn ngữ lập trình cho phép:
A. Lớp bạn có quyền truy cập tất cả các thành phần của lớp khác.
B. Lớp bạn được phép truy cập các thành phần riêng tư (private) của lớp khai báo nó là bạn.
C. Lớp bạn tự động kế thừa mọi thứ từ lớp khác.
D. Lớp bạn chỉ có thể gọi các phương thức công khai (public).
135. Khi so sánh lập trình hướng đối tượng với lập trình thủ tục, điểm khác biệt cốt lõi là gì?
A. Hướng đối tượng tập trung vào các hàm, còn thủ tục tập trung vào dữ liệu.
B. Hướng đối tượng tổ chức mã xung quanh dữ liệu và hành vi (đối tượng), còn thủ tục tập trung vào các bước thực thi tuần tự.
C. Hướng đối tượng không sử dụng biến, còn thủ tục thì có.
D. Hướng đối tượng chỉ dùng cho ứng dụng đồ họa, thủ tục cho ứng dụng dòng lệnh.
136. Trong các ngôn ngữ lập trình hướng đối tượng, khái niệm ‘method overloading’ (quá tải phương thức) cho phép:
A. Một lớp có nhiều phương thức với cùng tên nhưng có bộ tham số khác nhau.
B. Một lớp có nhiều phương thức với cùng tên và cùng bộ tham số.
C. Một lớp kế thừa phương thức từ lớp cha.
D. Một phương thức có thể thay đổi kiểu trả về.
137. Khi một lớp ‘DongVat’ khai báo một phương thức ‘diChuyen()’ là ‘abstract’, điều này có nghĩa là gì?
A. Phương thức ‘diChuyen()’ đã có sẵn mã thực thi trong lớp ‘DongVat’.
B. Các lớp kế thừa từ ‘DongVat’ bắt buộc phải cung cấp định nghĩa cho phương thức ‘diChuyen()’.
C. Phương thức ‘diChuyen()’ không thể được gọi.
D. Chỉ có thể gọi phương thức ‘diChuyen()’ từ lớp ‘DongVat’.
138. Đâu là một ví dụ về tính ‘đa hình’ (polymorphism) trong lập trình hướng đối tượng?
A. Một lớp kế thừa tất cả các thuộc tính của lớp cha.
B. Các đối tượng khác nhau có thể phản ứng khác nhau với cùng một thông điệp (lời gọi phương thức).
C. Tất cả các phương thức của một lớp đều có cùng tên.
D. Che giấu hoàn toàn dữ liệu bên trong của một đối tượng.
139. Trong lập trình hướng đối tượng, một lớp trừu tượng (abstract class) có đặc điểm chính là gì?
A. Không thể có bất kỳ thuộc tính nào.
B. Không thể khởi tạo đối tượng trực tiếp từ nó.
C. Phải có tất cả các phương thức được định nghĩa đầy đủ.
D. Chỉ có thể có một lớp con duy nhất kế thừa.
140. Theo phân tích các khái niệm cơ bản, ‘Trừu tượng hóa’ (Abstraction) trong lập trình hướng đối tượng tập trung vào điều gì?
A. Che giấu hoàn toàn mọi chi tiết kỹ thuật.
B. Tập trung vào các đặc điểm và hành vi cần thiết, ẩn đi các chi tiết không liên quan.
C. Tạo ra nhiều bản sao của cùng một đối tượng.
D. Đảm bảo tất cả các phương thức đều được định nghĩa đầy đủ.
141. Khi nói về ‘SOLID principles’ trong thiết kế hướng đối tượng, nguyên tắc ‘Single Responsibility Principle’ (Nguyên tắc Trách nhiệm Đơn lẻ) đề xuất điều gì?
A. Mỗi lớp nên có khả năng thực hiện nhiều chức năng khác nhau.
B. Mỗi lớp chỉ nên chịu trách nhiệm cho một phần chức năng duy nhất.
C. Tất cả các lớp nên kế thừa từ một lớp cơ sở duy nhất.
D. Các lớp không nên có bất kỳ trách nhiệm nào.
142. Đâu là một ví dụ về phương thức (method) của một lớp ‘TaiKhoanNganHang’?
A. Số dư tài khoản.
B. Tên chủ tài khoản.
C. Hành động ‘rút tiền’.
D. Mã số tài khoản.
143. Đâu là một ví dụ về ‘is-a’ relationship (quan hệ ‘là một’) trong lập trình hướng đối tượng?
A. Lớp ‘XeHoi’ có một thuộc tính ‘DongCo’.
B. Lớp ‘ConCho’ kế thừa từ lớp ‘DongVat’.
C. Lớp ‘TaiNghe’ kết hợp với lớp ‘MayNgheNhac’.
D. Lớp ‘MayIn’ có một phương thức ‘in’.
144. Khái niệm ‘đóng gói’ (encapsulation) trong lập trình hướng đối tượng chủ yếu nhằm mục đích gì?
A. Cho phép lớp con truy cập trực tiếp vào dữ liệu của lớp cha.
B. Che giấu chi tiết triển khai bên trong và chỉ cung cấp giao diện truy cập.
C. Tạo ra nhiều phiên bản khác nhau của cùng một phương thức.
D. Cho phép một đối tượng thay đổi kiểu dữ liệu của nó.
145. Khi một lớp ‘Sach’ có thuộc tính ‘Gia’ và phương thức ‘hienThiGia()’, và lớp ‘SachGiaoKhoa’ kế thừa từ ‘Sach’ có phương thức ‘hienThiGia()’ riêng (ví dụ: hiển thị giá đã giảm), đây là ví dụ về:
A. Đóng gói
B. Kế thừa và Đa hình
C. Trừu tượng hóa
D. Chỉ Kế thừa
146. Một lớp ‘HinhTron’ có phương thức ‘tinhDienTich()’. Nếu có một lớp ‘HinhVuong’ cũng có phương thức ‘tinhDienTich()’, nhưng cách tính khác nhau, điều này minh họa cho nguyên lý nào?
A. Kế thừa
B. Đóng gói
C. Đa hình
D. Trừu tượng hóa
147. Đâu là một ví dụ về ‘composition’ (sự kết hợp) trong lập trình hướng đối tượng, thể hiện mối quan hệ ‘has-a’?
A. Lớp ‘Ô tô’ kế thừa từ lớp ‘PhươngTiện’.
B. Lớp ‘MáyTính’ có một thuộc tính là đối tượng ‘MànHình’.
C. Lớp ‘KỹSư’ kế thừa từ lớp ‘Người’.
D. Lớp ‘NhânViên’ có một phương thức ‘làmViệc()’.
148. Đâu là một lợi ích của việc sử dụng ‘private’ (riêng tư) cho các thuộc tính của một lớp?
A. Cho phép mọi mã nguồn bên ngoài lớp truy cập và thay đổi trực tiếp.
B. Tăng cường tính bảo mật và kiểm soát việc truy cập dữ liệu.
C. Đảm bảo rằng thuộc tính đó không bao giờ thay đổi giá trị.
D. Yêu cầu tất cả các lớp con phải định nghĩa lại thuộc tính đó.
149. 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
150. 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?
A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)