1. Trong ngữ cảnh của 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, Consistency, Integrity, Durability.
C. Atomicity, Concurrency, Integrity, Distribution.
D. Accuracy, Concurrency, Isolation, Distribution.
2. Đâu là một lợi ích của việc sử dụng lập trình hướng đối tượng (OOP)?
A. Giảm kích thước mã nguồn.
B. Tăng tốc độ thực thi chương trình.
C. Tăng tính tái sử dụng mã và dễ bảo trì.
D. Giúp chương trình chạy được trên nhiều hệ điều hành.
3. Trong lập trình, `refactoring` (tái cấu trúc mã) là gì?
A. Thêm chức năng mới vào chương trình.
B. Sửa lỗi trong chương trình.
C. Cải thiện cấu trúc mã nguồn mà không thay đổi chức năng bên ngoài của nó.
D. Tối ưu hóa hiệu suất của chương trình.
4. Trong cấu trúc dữ liệu, ngăn xếp (stack) hoạt động theo nguyên tắc nào?
A. First-In, First-Out (FIFO).
B. Last-In, First-Out (LIFO).
C. Random Access.
D. Highest-In, First-Out (HIFO).
5. Nguyên tắc DRY (Don`t Repeat Yourself) trong lập trình nghĩa là gì?
A. Luôn viết mã một cách chi tiết và rõ ràng.
B. Tránh lặp lại mã; thay vào đó, trừu tượng hóa các phần mã chung thành các hàm hoặc lớp.
C. Sử dụng các biến cục bộ thay vì biến toàn cục.
D. Viết mã sao cho dễ đọc và dễ hiểu.
6. Độ phức tạp thời gian (time complexity) của một thuật toán biểu thị điều gì?
A. Lượng bộ nhớ mà thuật toán sử dụng.
B. Thời gian chạy của thuật toán tăng lên như thế nào khi kích thước đầu vào tăng.
C. Số dòng mã trong thuật toán.
D. Độ khó để hiểu thuật toán.
7. Trong lập trình hướng đối tượng, `inheritance` (kế thừa) cho phép điều gì?
A. Một lớp có thể truy cập trực tiếp vào dữ liệu của một lớp khác.
B. Một lớp có thể kế thừa các thuộc tính và phương thức từ một lớp khác.
C. Tạo ra các đối tượng không thể thay đổi.
D. Ẩn các chi tiết triển khai của một lớp.
8. Thuật toán sắp xếp nào có độ phức tạp thời gian trung bình là O(n log n)?
A. Bubble Sort.
B. Insertion Sort.
C. Merge Sort.
D. Selection Sort.
9. Sự khác biệt chính giữa `array` (mảng) và `linked list` (danh sách liên kết) là gì?
A. `Array` lưu trữ các phần tử liên tiếp trong bộ nhớ, trong khi `linked list` lưu trữ các phần tử rải rác và liên kết chúng bằng con trỏ.
B. `Linked list` lưu trữ các phần tử liên tiếp trong bộ nhớ, trong khi `array` lưu trữ các phần tử rải rác và liên kết chúng bằng con trỏ.
C. `Array` có kích thước động, còn `linked list` có kích thước cố định.
D. `Array` chỉ có thể lưu trữ số, còn `linked list` chỉ có thể lưu trữ chuỗi.
10. Bộ nhớ `heap` (vùng nhớ động) thường được sử dụng để làm gì?
A. Lưu trữ các biến cục bộ của hàm.
B. Lưu trữ mã nguồn của chương trình.
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ố.
11. Sự khác biệt giữa `pass by value` (truyền theo giá trị) và `pass by reference` (truyền theo tham chiếu) là gì?
A. Trong `pass by value`, hàm nhận một bản sao của giá trị, trong khi trong `pass by reference`, hàm nhận một tham chiếu đến biến gốc.
B. Trong `pass by reference`, hàm nhận một bản sao của giá trị, trong khi trong `pass by value`, hàm nhận một tham chiếu đến biến gốc.
C. Không có sự khác biệt, cả hai đều truyền cùng một giá trị.
D. `Pass by value` chỉ sử dụng được cho số, còn `pass by reference` chỉ sử dụng được cho chuỗi.
12. 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ó thể có nhiều thuộc tính khác nhau.
B. Một đối tượng có thể có nhiều phương thức khác nhau.
C. Một đối tượng có thể có nhiều kiểu dữ liệu khác nhau.
D. Một đối tượng có thể có nhiều hình thức khác nhau, tùy thuộc vào ngữ cảnh.
13. Đâu là một chiến lược để tránh deadlock (bế tắc) trong lập trình đa luồng?
A. Cho phép các luồng truy cập tài nguyên theo thứ tự ngẫu nhiên.
B. Yêu cầu tất cả các luồng yêu cầu tất cả các tài nguyên cần thiết cùng một lúc.
C. Sử dụng nhiều khóa (lock) hơn để bảo vệ các tài nguyên.
D. Tăng độ ưu tiên của một số luồng.
14. Sự khác biệt giữa `==` và `===` trong JavaScript là gì?
A. `==` so sánh giá trị, trong khi `===` so sánh cả giá trị và kiểu dữ liệu.
B. `===` so sánh giá trị, trong khi `==` so sánh cả giá trị và kiểu dữ liệu.
C. Không có sự khác biệt, cả hai đều so sánh giá trị.
D. `==` chỉ sử dụng được cho số, còn `===` chỉ sử dụng được cho chuỗi.
15. Trong lập trình, `callback function` là gì?
A. Một hàm được gọi tự động khi chương trình bắt đầu.
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.
16. Đâ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 của chương trình.
C. Tái sử dụng mã và chia chương trình thành các phần nhỏ hơn, dễ quản lý hơn.
D. Giúp chương trình chạy được trên nhiều hệ điều hành khác nhau.
17. Giải thuật nào sau đây có thời gian thực hiện tốt nhất là O(1)?
A. Tìm kiếm tuyến tính trong mảng chưa sắp xếp.
B. Truy cập một phần tử trong mảng bằng chỉ số của nó.
C. Sắp xếp nổi bọt (Bubble sort).
D. Tìm kiếm nhị phân trong mảng đã sắp xếp.
18. Mục đích chính của việc sử dụng hệ thống kiểm soát phiên bản (version control system) như Git là gì?
A. Để tự động tạo tài liệu cho dự án.
B. Để theo dõi và quản lý các thay đổi trong mã nguồn theo thời gian.
C. Để biên dịch mã nguồn thành mã máy.
D. Để triển khai ứng dụng lên máy chủ.
19. Chức năng của một `constructor` (hàm tạo) trong lập trình hướng đối tượng là gì?
A. Để xóa một đối tượng khỏi bộ nhớ.
B. Để khởi tạo một đối tượng mới của một lớp.
C. Để truy cập các thuộc tính riêng tư của một đối tượng.
D. Để định nghĩa các phương thức tĩnh của một lớp.
20. Đâ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 chuyển đổi mã nguồn thành mã máy trước khi thực thi, trong khi thông dịch thực thi mã nguồn từng dòng một.
B. Biên dịch thực thi mã nguồn từng dòng một, trong khi thông dịch chuyển đổi mã nguồn thành mã máy trước khi thực thi.
C. Biên dịch chỉ được sử dụng cho ngôn ngữ cấp thấp, còn thông dịch cho ngôn ngữ cấp cao.
D. Biên dịch tạo ra mã trung gian, còn thông dịch thì không.
21. Sự khác biệt chính giữa biến (variable) và hằng (constant) là gì?
A. Biến có thể thay đổi giá trị trong quá trình thực thi, trong khi hằng giữ giá trị không đổi.
B. Hằng có thể thay đổi giá trị trong quá trình thực thi, trong khi biến giữ giá trị không đổi.
C. Biến được sử dụng để lưu trữ số, còn hằng được sử dụng để lưu trữ chuỗi.
D. Biến được khai báo bằng `var`, còn hằng được khai báo bằng `const`.
22. Mục đích của việc sử dụng `comments` (chú thích) trong mã nguồn là gì?
A. Để tăng tốc độ thực thi chương trình.
B. Để giải thích mã nguồn và giúp người khác (hoặc chính bạn trong tương lai) hiểu rõ hơn về mã.
C. Để giảm kích thước mã nguồn.
D. Để mã hóa mã nguồn.
23. Đệ quy (recursion) là gì trong lập trình?
A. Một vòng lặp vô hạn.
B. Một hàm tự gọi chính nó để giải quyết một vấ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ớ.
24. Kiểu dữ liệu trừu tượng (Abstract Data Type - ADT) là gì?
A. Một kiểu dữ liệu cơ bản như số nguyên hoặc số thực.
B. 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ó, không quan tâm đến cách nó được triển khai.
C. Một kiểu dữ liệu chỉ có thể được sử dụng trong một ngôn ngữ lập trình cụ thể.
D. Một kiểu dữ liệu được sử dụng để lưu trữ các đối tượng.
25. Sự khác biệt giữa `stack` và `queue` trong cấu trúc dữ liệu là gì?
A. `Stack` tuân theo nguyên tắc FIFO, còn `queue` tuân theo nguyên tắc LIFO.
B. `Stack` tuân theo nguyên tắc LIFO, còn `queue` tuân theo nguyên tắc FIFO.
C. `Stack` chỉ có thể lưu trữ số, còn `queue` chỉ có thể lưu trữ chuỗi.
D. `Stack` là cấu trúc dữ liệu tĩnh, còn `queue` là cấu trúc dữ liệu động.
26. Trong lập trình, `casting` (ép kiểu) là gì?
A. Quá trình chuyển đổi một kiểu dữ liệu sang một kiểu dữ liệu khác.
B. Quá trình tạo ra một bản sao của một đối tượng.
C. Quá trình gỡ lỗi chương trình.
D. Quá trình tối ưu hóa mã nguồn.
27. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) đề cập đến điều gì?
A. Khả năng một đối tượng có nhiều hình thức khác nhau.
B. Cơ chế kết hợp dữ liệu và phương thức thao tác trên dữ liệu đó, đồng thời bảo vệ dữ liệu khỏi sự truy cập trực tiếp từ bên ngoài.
C. Khả năng 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.
D. Khả năng thực hiện nhiều tác vụ đồng thời.
28. 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 của chương trình.
D. Biên dịch mã nguồn thành mã máy.
29. Trong lập trình, `API` là viết tắt của cụm từ nào?
A. Advanced Programming Interface.
B. Application Programming Interface.
C. Automated Programming Instruction.
D. Applied Program Integration.
30. Đâu là một lợi ích của việc sử dụng `unit tests` (kiểm thử đơn vị)?
A. Tăng tốc độ thực thi chương trình.
B. Giảm kích thước mã nguồn.
C. Phát hiện lỗi sớm trong quá trình phát triển và đảm bảo các thành phần riêng lẻ của chương trình hoạt động đúng.
D. Giúp chương trình chạy được trên nhiều hệ điều hành.