1. Khái niệm Recursion (Đệ quy) trong lập trình đề cập đến điều gì?
A. Một vòng lặp thực thi nhiều lần cho đến khi đạt điều kiện dừng.
B. Một hàm gọi lại chính nó, trực tiếp hoặc gián tiếp, để giải quyết một bài toán.
C. Việc sử dụng biến toàn cục để chia sẻ dữ liệu giữa các hàm.
D. Sử dụng mảng để lưu trữ một tập hợp các giá trị.
2. Trong Lập trình Hướng đối tượng, Inheritance (Kế thừa) cho phép một lớp mới (lớp con) làm gì?
A. Tạo ra một đối tượng hoàn toàn mới, không liên quan đến lớp nào khác.
B. Kế thừa các thuộc tính và phương thức từ một lớp đã tồn tại (lớp cha) và có thể mở rộng hoặc sửa đổi chúng.
C. Truy cập trực tiếp vào dữ liệu riêng tư của các lớp khác.
D. Buộc các lớp khác phải sử dụng lại mã của nó.
3. Khi nói về cấu trúc dữ liệu Hash Table (Bảng băm), collision (xung đột băm) xảy ra khi nào?
A. Khi hai khóa khác nhau được băm thành cùng một chỉ số (index) trong mảng.
B. Khi bảng băm có quá ít phần tử và chiếm nhiều bộ nhớ.
C. Khi hàm băm trả về giá trị âm.
D. Khi kích thước của bảng băm lớn hơn kích thước của dữ liệu.
4. Trong lập trình, bug (lỗi) là gì?
A. Một tính năng mới được thêm vào chương trình.
B. Một lỗi trong mã nguồn gây ra hành vi không mong muốn hoặc sai lệch so với thiết kế.
C. Tốc độ xử lý chậm của chương trình.
D. Một thuật toán được tối ưu hóa để chạy nhanh hơn.
5. Khái niệm Thread (Luồng) trong hệ điều hành khác với Process (Tiến trình) ở điểm nào?
A. Luồng là một chương trình đang chạy, còn tiến trình là một tập hợp các chỉ thị không thực thi.
B. Tiến trình có không gian địa chỉ riêng, trong khi các luồng trong cùng một tiến trình chia sẻ không gian địa chỉ đó.
C. Luồng chỉ có thể thực hiện một tác vụ duy nhất, còn tiến trình có thể thực hiện nhiều tác vụ song song.
D. Tiến trình có thể được tạo ra nhanh hơn luồng.
6. Khái niệm Polymorphism (Đa hình) trong Lập trình Hướng đối tượng (OOP) cho phép đối tượng thuộc các lớp khác nhau phản ứng với cùng một lời gọi phương thức như thế nào?
A. Tất cả các đối tượng đều thực thi phương thức theo cùng một cách đã định nghĩa ở lớp cha.
B. Mỗi đối tượng thực thi phương thức theo cách riêng của lớp mình, có thể là ghi đè (override) hoặc triển khai (implement) lại.
C. Chỉ những đối tượng thuộc cùng một lớp mới có thể phản ứng với cùng một lời gọi phương thức.
D. Hệ thống sẽ tự động chọn phương thức phù hợp nhất dựa trên kiểu dữ liệu của biến.
7. Trong ngôn ngữ SQL (Structured Query Language), câu lệnh nào dùng để truy vấn dữ liệu từ một hoặc nhiều bảng?
A. INSERT
B. UPDATE
C. DELETE
D. SELECT
8. Trong các thuật toán sắp xếp, Merge Sort (Sắp xếp trộn) hoạt động dựa trên nguyên tắc chính nào?
A. Chia để trị (Divide and Conquer), chia mảng thành các phần nhỏ hơn, sắp xếp chúng và sau đó trộn (merge) lại.
B. Tìm phần tử nhỏ nhất và đặt nó vào vị trí đầu tiên, sau đó lặp lại với phần còn lại của mảng.
C. Hoán đổi các cặp phần tử liền kề nếu chúng sai thứ tự.
D. Chèn từng phần tử từ mảng chưa sắp xếp vào vị trí đúng trong mảng đã sắp xếp.
9. Trong thuật toán tìm kiếm, Binary Search (Tìm kiếm nhị phân) có thể áp dụng hiệu quả nhất trên loại dữ liệu nào?
A. Một danh sách liên kết đơn không có thứ tự.
B. Một mảng hoặc danh sách đã được sắp xếp.
C. Một cấu trúc dữ liệu cây nhị phân không cân bằng.
D. Một tập hợp các phần tử ngẫu nhiên.
10. Khái niệm Encapsulation (Đóng gói) trong OOP nhằm mục đích gì?
A. Cho phép các lớp con kế thừa tất cả thuộc tính và phương thức của lớp cha.
B. Gom dữ liệu (thuộc tính) và các phương thức xử lý dữ liệu đó vào chung một đơn vị là lớp, đồng thời ẩn đi chi tiết triển khai.
C. Tạo ra các đối tượng độc lập, không chia sẻ bất kỳ dữ liệu nào với nhau.
D. Cho phép một lớp tương tác với các lớp khác thông qua các giao diện công khai.
11. Khi làm việc với cấu trúc dữ liệu Stack (Ngăn xếp), thao tác nào sau đây là cơ bản và quan trọng nhất?
A. Thêm một phần tử vào giữa ngăn xếp.
B. Lấy một phần tử từ bất kỳ vị trí nào trong ngăn xếp.
C. Thêm một phần tử vào đỉnh ngăn xếp (Push) và lấy một phần tử từ đỉnh ngăn xếp (Pop).
D. Duyệt qua tất cả các phần tử của ngăn xếp theo thứ tự ngẫu nhiên.
12. Trong thuật toán Quick Sort (Sắp xếp nhanh), bước pivot selection (chọn phần tử chốt) đóng vai trò gì?
A. Xác định chính xác vị trí cuối cùng của mọi phần tử trong mảng.
B. Chia mảng thành hai phần: các phần tử nhỏ hơn hoặc bằng chốt và các phần tử lớn hơn chốt, để tiếp tục sắp xếp đệ quy.
C. Trộn các phần tử đã sắp xếp của hai nửa mảng lại với nhau.
D. Đảm bảo thuật toán luôn chạy với độ phức tạp O(n log n).
13. Khái niệm Data Structure (Cấu trúc dữ liệu) liên quan đến điều gì?
A. Ngôn ngữ lập trình được sử dụng để viết mã.
B. Cách tổ chức, quản lý và lưu trữ dữ liệu để truy cập và thao tác hiệu quả.
C. Tốc độ xử lý của CPU.
D. Giao diện đồ họa của ứng dụng.
14. Khái niệm Algorithm (Thuật toán) trong khoa học máy tính được mô tả chính xác nhất là gì?
A. Một chương trình máy tính được viết bằng một ngôn ngữ lập trình cụ thể.
B. Một tập hợp hữu hạn các bước rõ ràng, có trình tự, được thiết kế để giải quyết một bài toán hoặc thực hiện một nhiệm vụ.
C. Một công thức toán học phức tạp.
D. Một giao diện người dùng thân thiện.
15. Trong lý thuyết độ phức tạp tính toán, một bài toán được coi là NP-complete (NP-đầy đủ) nếu nó thỏa mãn điều kiện nào sau đây?
A. Nó có thể được giải quyết trong thời gian đa thức (polynomial time) bởi một máy Turing đơn định.
B. Nó thuộc lớp NP và mọi bài toán khác trong lớp NP đều có thể quy về nó trong thời gian đa thức.
C. Nó có thể được giải quyết trong thời gian đa thức bởi một máy Turing không đơn định.
D. Nó là một bài toán quyết định (decision problem) mà không có thuật toán nào có thể giải quyết được.
16. Khái niệm Garbage Collection (Thu gom rác) trong quản lý bộ nhớ là gì?
A. Quá trình giải phóng bộ nhớ đã được cấp phát cho các biến tạm thời trong một hàm.
B. Một cơ chế tự động tìm và giải phóng các vùng bộ nhớ không còn được sử dụng bởi chương trình.
C. Việc người lập trình chủ động xóa các đối tượng không cần thiết để giải phóng bộ nhớ.
D. Quá trình lưu trữ tạm thời dữ liệu trên ổ cứng khi bộ nhớ RAM đầy.
17. Trong cơ sở dữ liệu quan hệ, khóa chính (primary key) có vai trò gì?
A. Là một trường tùy chọn, dùng để liên kết hai bảng với nhau.
B. Một hoặc một tập hợp các thuộc tính (cột) đảm bảo tính duy nhất của mỗi bản ghi (hàng) trong bảng và không được phép là NULL.
C. Được sử dụng để xác định người dùng có quyền truy cập vào cơ sở dữ liệu.
D. Là trường chứa giá trị lớn nhất trong một cột.
18. Khi xem xét cấu trúc dữ liệu cây tìm kiếm nhị phân (Binary Search Tree - BST), trường hợp nào sau đây dẫn đến hiệu suất kém nhất (tương đương độ phức tạp tuyến tính O(n)) cho các thao tác tìm kiếm, thêm, xóa?
A. Cây được cân bằng hoàn hảo, với chiều cao gần logarit cơ số 2 của số nút.
B. Các phần tử được thêm vào cây theo thứ tự ngẫu nhiên.
C. Cây có dạng một danh sách liên kết đơn, xảy ra khi các phần tử được thêm vào theo thứ tự tăng dần hoặc giảm dần.
D. Cây có số lượng nút là lũy thừa của 2.
19. Khái niệm Abstraction (Trừu tượng hóa) trong khoa học máy tính giúp giải quyết vấn đề gì?
A. Giảm thiểu số lượng biến có thể sử dụng trong một chương trình.
B. Cho phép tập trung vào các khía cạnh quan trọng của một vấn đề và bỏ qua các chi tiết không cần thiết hoặc phức tạp.
C. Tăng tốc độ xử lý của thuật toán bằng cách loại bỏ các bước không cần thiết.
D. Đảm bảo mọi dữ liệu đều được lưu trữ dưới dạng số nguyên.
20. Trong mạng máy tính, địa chỉ IP (Internet Protocol address) có chức năng gì?
A. Xác định tên miền của một trang web.
B. Định danh duy nhất cho một thiết bị trên mạng, cho phép các thiết bị giao tiếp với nhau.
C. Mã hóa dữ liệu để bảo mật thông tin.
D. Kiểm soát băng thông của kết nối mạng.
21. Trong phân tích thuật toán, độ phức tạp thời gian (time complexity) đo lường điều gì?
A. Lượng bộ nhớ RAM mà thuật toán sử dụng.
B. Số lượng phép toán cơ bản mà thuật toán thực hiện để hoàn thành, tính theo hàm của kích thước đầu vào.
C. Thời gian thực thi của thuật toán trên một máy tính cụ thể.
D. Số dòng mã nguồn của thuật toán.
22. Trong hệ điều hành, process (tiến trình) được định nghĩa là gì?
A. Một tập hợp các chỉ thị (instructions) được thực thi tuần tự.
B. Một chương trình đang chạy, bao gồm mã lệnh, dữ liệu, trạng thái thực thi và các tài nguyên hệ thống được cấp phát.
C. Một đoạn mã nhỏ được tải vào bộ nhớ để thực hiện một tác vụ cụ thể.
D. Một luồng (thread) thực thi độc lập bên trong một chương trình.
23. Khi nói về cấu trúc dữ liệu Queue (Hàng đợi), nó tuân theo nguyên tắc truy cập nào?
A. LIFO (Last In, First Out)
B. FIFO (First In, First Out)
C. FILO (First In, Last Out)
D. LILO (Last In, Last Out)
24. Theo cách hiểu phổ biến trong khoa học máy tính, thuật ngữ Big O notation (ký hiệu O lớn) chủ yếu được sử dụng để làm gì?
A. Đo lường chính xác thời gian thực thi của một thuật toán trên một cấu hình phần cứng cụ thể.
B. Mô tả hành vi giới hạn trên (upper bound) của thời gian hoặc không gian cần thiết cho một thuật toán khi kích thước đầu vào tăng lên.
C. Phân loại các thuật toán dựa trên mức độ sử dụng bộ nhớ RAM.
D. Xác định lỗi cú pháp trong mã nguồn của chương trình.
25. Trong lĩnh vực mạng máy tính, giao thức nào chịu trách nhiệm truyền tải các trang web trên World Wide Web?
A. FTP (File Transfer Protocol)
B. SMTP (Simple Mail Transfer Protocol)
C. HTTP (Hypertext Transfer Protocol)
D. DNS (Domain Name System)