1. Kiểu dữ liệu trừu tượng (Abstract Data Type - ADT) là gì?
A. Một kiểu dữ liệu được định nghĩa bằng cách sử dụng các từ khóa abstract.
B. Một kiểu dữ liệu chỉ có thể được sử dụng trong lập trình hướng đối tượng.
C. Một kiểu dữ liệu được định nghĩa bởi các thao tác có thể thực hiện trên nó và các thuộc tính của nó, không quan tâm đến việc triển khai cụ thể.
D. Một kiểu dữ liệu không thể thay đổi sau khi được khởi tạo.
2. Trong lập trình, thuật ngữ `syntax` đề cập đến điều gì?
A. Logic của chương trình.
B. Cấu trúc và quy tắc của ngôn ngữ lập trình.
C. Hiệu suất của chương trình.
D. Giao diện người dùng của chương trình.
3. Sự khác biệt chính giữa Stack và Queue là gì?
A. Stack sử dụng FIFO (First In, First Out), Queue sử dụng LIFO (Last In, First Out).
B. Stack sử dụng LIFO (Last In, First Out), Queue sử dụng FIFO (First In, First Out).
C. Stack chỉ lưu trữ số nguyên, Queue lưu trữ mọi kiểu dữ liệu.
D. Stack nhanh hơn Queue.
4. Đâu là sự khác biệt chính giữa biên dịch (compilation) và thông dịch (interpretation) trong quá trình thực thi chương trình?
A. Biên dịch tạo ra mã máy trực tiếp, trong khi thông dịch thực thi mã nguồn từng dòng một.
B. Thông dịch tạo ra mã máy trực tiếp, trong khi biên dịch thực thi mã nguồn từng dòng một.
C. Biên dịch chỉ được sử dụng cho ngôn ngữ cấp cao, còn thông dịch cho ngôn ngữ cấp thấp.
D. Thông dịch yêu cầu nhiều bộ nhớ hơn biên dịch.
5. Exception handling (xử lý ngoại lệ) là gì và tại sao nó quan trọng?
A. Một kỹ thuật để tăng tốc độ chương trình, nó quan trọng vì nó làm cho chương trình chạy nhanh hơn.
B. Một cơ chế để xử lý các lỗi và tình huống bất thường xảy ra trong quá trình chạy chương trình, nó quan trọng vì giúp chương trình không bị dừng đột ngột.
C. Một cách để bảo mật chương trình, nó quan trọng vì nó ngăn chặn hacker tấn công.
D. Một phương pháp để giảm dung lượng bộ nhớ, nó quan trọng vì nó tiết kiệm bộ nhớ.
6. Sự khác biệt chính giữa testing và debugging là gì?
A. Testing là viết code, debugging là chạy code.
B. Testing là tìm lỗi, debugging là sửa lỗi.
C. Testing là sửa lỗi, debugging là tìm lỗi.
D. Không có sự khác biệt, cả hai đều là quá trình tìm và sửa lỗi.
7. Trong lập trình web, CORS là gì và tại sao nó quan trọng?
A. Một ngôn ngữ lập trình, nó quan trọng vì nó dễ học.
B. Một cơ chế bảo mật trình duyệt web để kiểm soát các yêu cầu tài nguyên từ các nguồn gốc khác nhau, nó quan trọng vì giúp ngăn chặn các tấn công XSS.
C. Một hệ quản trị cơ sở dữ liệu, nó quan trọng vì nó nhanh.
D. Một giao thức mạng, nó quan trọng vì nó an toàn.
8. Công cụ quản lý phiên bản (version control system) được sử dụng để làm gì?
A. Để tự động viết code.
B. Để theo dõi và quản lý các thay đổi trong mã nguồn.
C. Để tăng tốc độ biên dịch.
D. Để thiết kế giao diện người dùng.
9. SOLID là gì trong lập trình hướng đối tượng?
A. Một ngôn ngữ lập trình mới.
B. Một tập hợp các nguyên tắc thiết kế để làm cho phần mềm dễ hiểu, linh hoạt và bảo trì hơn.
C. Một công cụ để debug chương trình.
D. Một phương pháp để tối ưu hóa hiệu suất cơ sở dữ liệu.
10. Con trỏ (pointer) là gì?
A. Một biến lưu trữ dữ liệu.
B. Một biến lưu trữ địa chỉ của một biến khác.
C. Một hàm đặc biệt dùng để khởi tạo biến.
D. Một kiểu dữ liệu dùng để lưu trữ số thực.
11. Unit testing là gì?
A. Kiểm tra toàn bộ hệ thống.
B. Kiểm tra từng đơn vị (unit) nhỏ nhất của mã nguồn.
C. Kiểm tra giao diện người dùng.
D. Kiểm tra hiệu suất của chương trình.
12. Đệ quy (recursion) là gì?
A. Một hàm gọi chính nó.
B. Một vòng lặp vô hạn.
C. Một cách để định nghĩa các biến toàn cục.
D. Một kỹ thuật để tối ưu hóa bộ nhớ.
13. Bộ nhớ heap thường được sử dụng để làm gì?
A. Lưu trữ mã chương trình đang thực thi.
B. Lưu trữ các biến cục bộ của hàm.
C. Lưu trữ dữ liệu được cấp phát động trong quá trình chạy chương trình.
D. Lưu trữ các hằng số.
14. Mục đích chính của việc sử dụng comments trong mã nguồn là gì?
A. Để tăng tốc độ biên dịch.
B. Để cải thiện hiệu suất của chương trình.
C. Để giải thích và làm rõ mã nguồn cho người đọc.
D. Để giảm dung lượng của tệp mã nguồn.
15. Trong lập trình hướng đối tượng, `inheritance` (kế thừa) nghĩa là gì?
A. Một đối tượng có thể chứa nhiều đối tượng khác.
B. Một lớp (class) có thể kế thừa các thuộc tính và phương thức từ một lớp khác.
C. Một phương thức có thể được gọi từ nhiều lớp khác nhau.
D. Một biến có thể được sử dụng trong nhiều hàm khác nhau.
16. Mục đích của việc sử dụng Design Patterns là gì?
A. Để tăng tốc độ chương trình.
B. Để giải quyết các vấn đề thiết kế phần mềm thường gặp một cách hiệu quả và tái sử dụng.
C. Để tạo ra giao diện người dùng đẹp mắt.
D. Để bảo mật chương trình.
17. Sự khác biệt giữa thuật toán sắp xếp (sorting algorithm) `merge sort` và `quick sort` là gì?
A. Merge sort là thuật toán so sánh, quick sort là thuật toán không so sánh.
B. Merge sort luôn có độ phức tạp O(n log n), quick sort có thể có độ phức tạp O(n^2) trong trường hợp xấu nhất.
C. Quick sort ổn định hơn merge sort.
D. Merge sort hoạt động tại chỗ (in-place), quick sort không.
18. Trong lập trình đa luồng (multithreading), `race condition` là gì?
A. Một tình huống khi một luồng chạy nhanh hơn các luồng khác.
B. Một tình huống khi kết quả của chương trình phụ thuộc vào thứ tự thực hiện của các luồng, và thứ tự này không thể đoán trước được.
C. Một tình huống khi chương trình bị treo.
D. Một tình huống khi bộ nhớ bị đầy.
19. Trong ngữ cảnh của cấu trúc dữ liệu, FIFO là viết tắt của điều gì?
A. First In, First Out.
B. First In, Final Out.
C. Final In, First Out.
D. Final In, Final Out.
20. Sự khác biệt chính giữa `==` và `=` trong nhiều ngôn ngữ lập trình là gì?
A. `==` dùng để gán giá trị, `=` dùng để so sánh.
B. `==` dùng để so sánh giá trị, `=` dùng để gán giá trị.
C. Cả hai đều dùng để gán giá trị, nhưng `==` chỉ dùng cho số nguyên.
D. Cả hai đều dùng để so sánh giá trị, nhưng `==` chỉ dùng cho số thực.
21. Mục đích chính của việc sử dụng API (Application Programming Interface) là gì?
A. Để tăng tốc độ chương trình.
B. Để tạo ra giao diện người dùng đẹp mắt.
C. Để cho phép các ứng dụng khác nhau giao tiếp và trao đổi dữ liệu với nhau.
D. Để bảo mật chương trình.
22. Dependency Injection (DI) là gì và tại sao nó hữu ích?
A. Một kỹ thuật để giảm kích thước chương trình.
B. Một mẫu thiết kế phần mềm cho phép giảm sự phụ thuộc giữa các thành phần của chương trình, giúp chương trình dễ bảo trì và kiểm thử hơn.
C. Một phương pháp để tăng tốc độ chương trình.
D. Một cách để bảo mật chương trình.
23. Trong lập trình, thuật ngữ `deadlock` (bế tắc) mô tả tình huống nào?
A. Chương trình chạy quá nhanh.
B. Hai hoặc nhiều tiến trình chờ đợi lẫn nhau để giải phóng tài nguyên, dẫn đến không tiến trình nào có thể tiếp tục.
C. Bộ nhớ bị đầy.
D. Một lỗi cú pháp trong mã.
24. Debugging là gì?
A. Viết mã chương trình.
B. Tìm và sửa lỗi trong mã chương trình.
C. Chạy chương trình.
D. Thiết kế giao diện người dùng.
25. Big O notation được sử dụng để làm gì?
A. Đo tốc độ thực thi của chương trình.
B. Đánh giá độ phức tạp của thuật toán.
C. Đo dung lượng bộ nhớ sử dụng bởi chương trình.
D. Đếm số dòng code trong chương trình.
26. Đâ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 của chương trình.
B. Tăng tốc độ thực thi chương trình.
C. Tái sử dụng mã và làm cho chương trình dễ đọc, dễ bảo trì hơn.
D. Ngăn chặn việc sử dụng biến toàn cục.
27. Trong lập trình web, HTTP là gì?
A. Một ngôn ngữ lập trình.
B. Một giao thức truyền tải siêu văn bản.
C. Một hệ quản trị cơ sở dữ liệu.
D. Một loại virus máy tính.
28. Sự khác biệt chính giữa lập trình hàm (functional programming) và lập trình mệnh lệnh (imperative programming) là gì?
A. Lập trình hàm tập trung vào việc thay đổi trạng thái, lập trình mệnh lệnh tập trung vào việc tính toán giá trị.
B. Lập trình hàm tập trung vào việc tính toán giá trị, lập trình mệnh lệnh tập trung vào việc thay đổi trạng thái.
C. Lập trình hàm sử dụng vòng lặp, lập trình mệnh lệnh sử dụng đệ quy.
D. Lập trình hàm nhanh hơn lập trình mệnh lệnh.
29. Trong cơ sở dữ liệu, ACID là viết tắt của những thuộc tính nào?
A. Atomicity, Consistency, Isolation, Durability.
B. Accuracy, Completeness, Integrity, ডেটা.
C. Availability, Consistency, Integrity, Durability.
D. Atomicity, Completeness, Isolation, ডেটা.
30. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) nhằm mục đích chính là gì?
A. Giảm thiểu việc sử dụng bộ nhớ.
B. Tăng tốc độ thực thi chương trình.
C. Ẩn giấu thông tin và bảo vệ dữ liệu khỏi truy cập trái phép.
D. Đơn giản hóa quá trình biên dịch.