1. Trong lập trình hướng đối tượng, tính chất 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. Đa hình (Polymorphism)
C. Kế thừa (Inheritance)
D. Trừu tượng (Abstraction)
2. Trong lập trình, `recursion` (đệ quy) là gì?
A. Một kỹ thuật để tối ưu hóa hiệu suất
B. Một hàm gọi chính nó
C. Một cách để xử lý lỗi
D. Một kiểu dữ liệu đặc biệt
3. Trong lập trình, `exception` (ngoại lệ) là gì?
A. Một kiểu dữ liệu đặc biệt
B. Một lỗi xảy ra trong quá trình biên dịch
C. Một sự kiện bất thường xảy ra trong quá trình thực thi chương trình
D. Một hàm được định nghĩa sẵn
4. Kiểu dữ liệu nào thường được sử dụng để lưu trữ một chuỗi ký tự trong hầu hết các ngôn ngữ lập trình?
A. Integer
B. Float
C. String
D. Boolean
5. Điều gì xảy ra khi một biến được khai báo mà không được khởi tạo giá trị?
A. Chương trình sẽ báo lỗi
B. Biến sẽ tự động được gán giá trị 0
C. Biến sẽ chứa một giá trị mặc định tùy thuộc vào kiểu dữ liệu
D. Biến sẽ chứa một giá trị ngẫu nhiên
6. Đâu là mục đích chính của việc sử dụng hệ thống quản lý phiên bản (version control system) như Git?
A. Tự động hóa quá trình triển khai ứng dụng
B. Quản lý và theo dõi các thay đổi của mã nguồn
C. Tối ưu hóa hiệu suất của ứng dụng
D. Bảo vệ mã nguồn khỏi virus
7. Sự khác biệt chính giữa `procedural programming` và `object-oriented programming` là gì?
A. Procedural programming nhanh hơn object-oriented programming
B. Object-oriented programming dễ học hơn procedural programming
C. Procedural programming tập trung vào hàm, object-oriented programming tập trung vào đối tượng
D. Không có sự khác biệt, chúng chỉ là hai tên gọi khác nhau
8. Đâu là mục đích chính của việc sử dụng `unit testing` (kiểm thử đơn vị)?
A. Kiểm tra tính bảo mật của ứng dụng
B. Kiểm tra hiệu suất của ứng dụng
C. Kiểm tra từng thành phần nhỏ nhất của mã để đảm bảo chúng hoạt động đúng
D. Kiểm tra giao diện người dùng
9. Trong lập trình, `concurrency` (tính đồng thời) là gì?
A. Khả năng thực hiện nhiều tác vụ cùng một lúc
B. Khả năng chạy trên nhiều hệ điều hành khác nhau
C. Khả năng tự động sửa lỗi
D. Khả năng kết nối với nhiều cơ sở dữ liệu
10. Sự khác biệt chính giữa `compile-time` và `run-time` là gì?
A. Compile-time là thời gian viết mã, run-time là thời gian debug
B. Compile-time là thời gian biên dịch mã, run-time là thời gian chương trình chạy
C. Compile-time là thời gian kiểm thử, run-time là thời gian triển khai
D. Không có sự khác biệt, chúng là hai tên gọi của cùng một giai đoạn
11. Đâu là lợi ích chính của việc sử dụng `design patterns` (mẫu thiết kế)?
A. Tăng tốc độ viết mã
B. Cung cấp các giải pháp đã được chứng minh cho các vấn đề thiết kế phổ biến
C. Tự động tạo tài liệu
D. Giảm số lượng dòng mã
12. Cấu trúc điều khiển nào cho phép thực hiện một khối lệnh nhiều lần dựa trên một điều kiện?
A. If-else
B. Switch-case
C. Loop (Vòng lặp)
D. Try-catch
13. Trong lập trình hướng đối tượng, `đóng gói` (encapsulation) dùng để làm gì?
A. Ẩn chi tiết triển khai và bảo vệ dữ liệu
B. Cho phép các đối tượng thuộc các lớp khác nhau tương tác với nhau
C. Tạo ra các lớp con từ một lớp cha
D. Định nghĩa các giao diện
14. Trong lập trình, `algorithm` (thuật toán) là gì?
A. Một ngôn ngữ lập trình
B. Một công cụ để debug chương trình
C. Một tập hợp các bước hướng dẫn để giải quyết một vấn đề
D. Một kiểu dữ liệu đặc biệt
15. Phương pháp nào sau đây giúp cải thiện khả năng đọc và bảo trì mã nguồn?
A. Viết mã càng ngắn càng tốt
B. Sử dụng tên biến và hàm có ý nghĩa
C. Không sử dụng comment
D. Viết tất cả mã trên một dòng
16. Trong lập trình, `callback function` (hàm gọi lại) là gì?
A. Một hàm được gọi tự động khi chương trình khởi động
B. Một hàm được truyền như một đối số cho một hàm khác và được gọi sau khi hàm đó hoàn thành
C. Một hàm được sử dụng để xử lý lỗi
D. Một hàm được sử dụng để tối ưu hóa hiệu suất
17. Đâu là lợi ích chính của việc sử dụng hàm (function) trong lập trình?
A. Giảm kích thước chương trình
B. Tăng tốc độ thực thi
C. Tái sử dụng mã và giảm sự phức tạp
D. Tăng tính bảo mật
18. Nguyên tắc DRY (Don`t Repeat Yourself) khuyến khích điều gì trong lập trình?
A. Viết mã càng ngắn gọn càng tốt
B. Tránh lặp lại mã giống nhau
C. Sử dụng nhiều comment để giải thích mã
D. Viết mã dễ đọc
19. Trong lập trình, `refactoring` (tái cấu trúc mã) là gì?
A. Viết lại toàn bộ mã từ đầu
B. Thay đổi chức năng của chương trình
C. Cải thiện cấu trúc mã mà không thay đổi chức năng bên ngoài
D. Tối ưu hóa hiệu suất bằng cách sử dụng các thuật toán phức tạp hơn
20. Trong lập trình, `data structure` (cấu trúc dữ liệu) dùng để làm gì?
A. Để lưu trữ dữ liệu một cách hiệu quả và có tổ chức
B. Để thực hiện các phép toán số học
C. Để điều khiển luồng thực thi của chương trình
D. Để tạo giao diện người dùng
21. Phương pháp tiếp cận `chia để trị` (divide and conquer) thường được sử dụng để giải quyết loại bài toán nào?
A. Bài toán tìm kiếm tuyến tính
B. Bài toán sắp xếp mảng
C. Bài toán tối ưu hóa
D. Bài toán có thể chia nhỏ thành các bài toán con tương tự
22. Trong lập trình, `garbage collection` (thu gom rác) là gì?
A. Một quá trình để loại bỏ các lỗi trong mã
B. Một quá trình để tối ưu hóa hiệu suất của chương trình
C. Một quá trình để tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình
D. Một quá trình để bảo vệ chương trình khỏi virus
23. Trong lập trình, `debug` có nghĩa là gì?
A. Viết tài liệu cho chương trình
B. Tìm và sửa lỗi trong chương trình
C. Tối ưu hóa hiệu suất chương trình
D. Biên dịch mã nguồn
24. Đâu là sự khác biệt chính giữa `stack` và `queue`?
A. Stack là LIFO (Last In, First Out), Queue là FIFO (First In, First Out)
B. Stack là FIFO (First In, First Out), Queue là LIFO (Last In, First Out)
C. Stack chỉ có thể chứa số nguyên, Queue có thể chứa mọi kiểu dữ liệu
D. Stack nhanh hơn Queue
25. Đâu là lợi ích của việc sử dụng `code review` (kiểm tra mã) trong quá trình phát triển phần mềm?
A. Tăng tốc độ viết mã
B. Giảm số lượng dòng mã
C. Phát hiện lỗi sớm và cải thiện chất lượng mã
D. Tự động tạo tài liệu
26. Trong ngữ cảnh lập trình, `biến` (variable) là gì?
A. Một kiểu dữ liệu đặc biệt
B. Một hàm được định nghĩa sẵn
C. Một vùng nhớ được đặt tên để lưu trữ dữ liệu
D. Một toán tử số học
27. Sự khác biệt chính giữa `interpreter` và `compiler` là gì?
A. Interpreter biên dịch mã một lần, compiler biên dịch mã mỗi khi chạy
B. Compiler biên dịch mã một lần, interpreter biên dịch mã mỗi khi chạy
C. Interpreter tạo ra mã máy, compiler không tạo ra mã máy
D. Compiler nhanh hơn interpreter
28. Thuật toán nào sau đây có độ phức tạp thời gian tốt nhất trong trường hợp tốt nhất để tìm kiếm một phần tử trong một mảng đã được sắp xếp?
A. Tìm kiếm tuyến tính (Linear Search)
B. Tìm kiếm nhị phân (Binary Search)
C. Sắp xếp nổi bọt (Bubble Sort)
D. Sắp xếp chèn (Insertion Sort)
29. Trong lập trình, `deadlock` (bế tắc) là gì?
A. Một lỗi xảy ra khi chương trình cố gắng truy cập vào một vùng nhớ không hợp lệ
B. Một tình huống mà hai hoặc nhiều tiến trình bị chặn vĩnh viễn vì mỗi tiến trình đang chờ một tài nguyên mà tiến trình khác đang giữ
C. Một lỗi xảy ra khi chương trình chạy quá chậm
D. Một lỗi xảy ra khi chương trình sử dụng quá nhiều bộ nhớ
30. Trong lập trình, `API` là viết tắt của cụm từ nào?
A. Application Programming Interface
B. Advanced Program Instruction
C. Automated Process Integration
D. Algorithm Performance Index