1. Độ phức tạp thời gian của thuật toán tìm kiếm nhị phân (Binary Search) là gì?
A. O(n)
B. O(n^2)
C. O(log n)
D. O(1)
2. Trong lập trình, thuật ngữ `recursion` (đệ quy) có nghĩa 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 để tối ưu hóa code.
D. Một kiểu dữ liệu đặc biệt.
3. Đâ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 tạo tài liệu cho code.
B. Quản lý và theo dõi các thay đổi của code theo thời gian.
C. Tối ưu hóa hiệu suất của code.
D. Bảo vệ code khỏi virus.
4. Trong lập trình web, CORS (Cross-Origin Resource Sharing) giải quyết vấn đề gì?
A. Bảo vệ trang web khỏi tấn công SQL injection.
B. Cho phép hoặc từ chối các yêu cầu từ các domain khác nhau để truy cập tài nguyên.
C. Tối ưu hóa tốc độ tải trang.
D. Quản lý phiên người dùng.
5. Trong lập trình hướng đối tượng, `polymorphism` (đa hình) cho phép điều gì?
A. Một đối tượng có nhiều thuộc tính.
B. Một đối tượng có thể có nhiều lớp cha.
C. Một đối tượng có thể được coi là thuộc nhiều kiểu khác nhau.
D. Một lớp có thể có nhiều phương thức khởi tạo.
6. Hệ điều hành (Operating System) có vai trò gì trong hệ thống máy tính?
A. Chạy các ứng dụng văn phòng.
B. Quản lý phần cứng và cung cấp giao diện cho người dùng tương tác với máy tính.
C. Thiết kế giao diện người dùng cho các ứng dụng.
D. Biên dịch code thành ngôn ngữ máy.
7. Trong lập trình, `comment` (chú thích) được sử dụng để làm gì?
A. Thực thi một đoạn code đặc biệt.
B. Giải thích code cho người đọc.
C. Tối ưu hóa hiệu suất chương trình.
D. Báo lỗi cho người dùng.
8. Tại sao cần sử dụng các chuẩn mã hóa (encoding) như UTF-8 khi làm việc với văn bản?
A. Để tăng tốc độ xử lý văn bản.
B. Để giảm kích thước file văn bản.
C. Để đảm bảo văn bản được hiển thị chính xác trên các hệ thống khác nhau.
D. Để bảo vệ văn bản khỏi bị sao chép.
9. JSON (JavaScript Object Notation) được sử dụng chủ yếu để làm gì?
A. Thiết kế giao diện người dùng.
B. Lưu trữ và trao đổi dữ liệu giữa các ứng dụ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ớ.
10. Đâu là điểm khác biệt chính giữa biên dịch (compilation) và thông dịch (interpretation)?
A. Biên dịch tạo ra mã máy trực tiếp, thông dịch thực thi code từng dòng.
B. Biên dịch chạy nhanh hơn thông dịch.
C. Biên dịch dễ debug hơn thông dịch.
D. Biên dịch không cần trình biên dịch, thông dịch cần trình thông dịch.
11. Trong lập trình, thuật ngữ `debug` có nghĩa là gì?
A. Viết code nhanh chóng.
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. Thêm tính năng mới vào chương trình.
12. Trong lập trình, exception handling (xử lý ngoại lệ) dùng để làm gì?
A. Tăng tốc độ chương trình.
B. Ngăn chặn lỗi xảy ra.
C. Xử lý các lỗi xảy ra trong quá trình chạy chương trình một cách an toàn.
D. Ẩn code khỏi người dùng.
13. Đâ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ằng cách loại bỏ các biến.
B. Tăng tốc độ thực thi chương trình bằng cách tối ưu hóa phần cứng.
C. Tái sử dụng code và chia chương trình thành các phần nhỏ, dễ quản lý.
D. Tăng tính bảo mật bằng cách ẩn code khỏi người dùng.
14. Sự khác biệt giữa `==` và `===` trong JavaScript là gì?
A. `==` so sánh giá trị, `===` so sánh kiểu dữ liệu.
B. `==` so sánh giá trị, `===` so sánh giá trị và kiểu dữ liệu.
C. `==` so sánh tham chiếu, `===` so sánh giá trị.
D. Không có sự khác biệt.
15. Thuật ngữ `API` (Application Programming Interface) dùng để chỉ điều gì?
A. Một loại ngôn ngữ lập trình mới.
B. Một tập hợp các quy tắc và giao thức cho phép các ứng dụng tương tác với nhau.
C. Một công cụ để thiết kế giao diện người dùng.
D. Một phương pháp để tối ưu hóa cơ sở dữ liệu.
16. Ngôn ngữ lập trình nào sau đây thường được sử dụng để phát triển ứng dụng web phía máy khách (client-side)?
A. Java
B. Python
C. JavaScript
D. C++
17. Giải thích ngắn gọn về Dependency Injection?
A. Là một mẫu thiết kế mà các dependencies được cung cấp cho một component thay vì component tự tạo chúng.
B. Là một kỹ thuật để tối ưu hóa hiệu suất chương trình.
C. Là một phương pháp để bảo mật code.
D. Là một cách để tạo giao diện người dùng.
18. RAM (Random Access Memory) có vai trò gì trong máy tính?
A. Lưu trữ dữ liệu lâu dài.
B. Lưu trữ dữ liệu tạm thời để CPU truy cập nhanh chóng.
C. Xử lý các phép toán số học.
D. Hiển thị hình ảnh lên màn hình.
19. Kiểu dữ liệu nào sau đây thường được sử dụng để lưu trữ một chuỗi các ký tự?
A. Integer
B. Float
C. Boolean
D. String
20. Vòng lặp `for` thường được sử dụng khi nào?
A. Khi cần thực hiện một đoạn code một lần duy nhất.
B. Khi cần thực hiện một đoạn code lặp đi lặp lại một số lần biết trước.
C. Khi cần thực hiện một đoạn code lặp đi lặp lại cho đến khi một điều kiện nào đó sai.
D. Khi cần định nghĩa một hàm.
21. Sự khác biệt chính giữa Stack và Queue là gì?
A. Stack sử dụng bộ nhớ nhiều hơn Queue.
B. Stack là FIFO, Queue là LIFO.
C. Stack là LIFO, Queue là FIFO.
D. Stack chỉ lưu trữ số, Queue chỉ lưu trữ chuỗi.
22. Phương pháp kiểm thử phần mềm nào kiểm tra các đơn vị nhỏ nhất của code, như hàm hoặc lớp?
A. Kiểm thử tích hợp (Integration testing)
B. Kiểm thử hệ thống (System testing)
C. Kiểm thử đơn vị (Unit testing)
D. Kiểm thử chấp nhận (Acceptance testing)
23. Mục đích của việc sử dụng `virtual environment` (môi trường ảo) trong Python là gì?
A. Để tăng tốc độ thực thi code Python.
B. Để tạo một môi trường cô lập cho các dự án Python, tránh xung đột giữa các thư viện.
C. Để bảo vệ code Python khỏi bị sao chép.
D. Để tự động tạo tài liệu cho code Python.
24. Khi nào nên sử dụng cấu trúc dữ liệu `hash table` (bảng băm)?
A. Khi cần sắp xếp dữ liệu.
B. Khi cần tìm kiếm, chèn, xóa dữ liệu nhanh chóng dựa trên khóa.
C. Khi cần lưu trữ dữ liệu theo thứ tự tuyến tính.
D. Khi cần biểu diễn mối quan hệ giữa các đối tượng.
25. Trong cơ sở dữ liệu, khóa chính (primary key) có chức năng gì?
A. Liên kết các bảng với nhau.
B. Xác định duy nhất mỗi bản ghi trong bảng.
C. Sắp xếp dữ liệu trong bảng.
D. Lọc dữ liệu trong bảng.
26. 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 của 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)
27. Biến (variable) trong lập trình được sử dụng để làm gì?
A. Lưu trữ dữ liệu.
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. Định nghĩa các hàm.
28. Phương pháp tiếp cận `chia để trị` (divide and conquer) thường được sử dụng trong thuật toán nào?
A. Tìm kiếm tuyến tính (Linear Search)
B. Sắp xếp nổi bọt (Bubble Sort)
C. Sắp xếp trộn (Merge Sort)
D. Sắp xếp chọn (Selection Sort)
29. Cấu trúc dữ liệu nào sau đây hoạt động theo nguyên tắc `First In, First Out` (FIFO)?
A. Stack
B. Queue
C. Tree
D. Graph
30. Trong lập trình bất đồng bộ (asynchronous programming), `promise` (lời hứa) được sử dụng để làm gì?
A. Để lưu trữ dữ liệu tạm thời.
B. Để xử lý các tác vụ mất nhiều thời gian mà không làm treo chương trình.
C. Để tạo hiệu ứng động cho giao diện người dùng.
D. Để mã hóa dữ liệu.