1. Sự khác biệt chính giữa `array` và `linked list` là gì?
A. Array có kích thước cố định, linked list có thể thay đổi kích thước
B. Array chỉ có thể chứa số nguyên, linked list có thể chứa mọi kiểu dữ liệu
C. Array nhanh hơn linked list
D. Array sử dụng bộ nhớ ít hơn linked list
2. 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, Completeness, Integrity, Dependability
C. Authorization, Confirmation, Identification, Encryption
D. Availability, Capacity, Integrity, Distribution
3. Phương pháp kiểm thử phần mềm nào kiểm tra các thành phần riêng lẻ của phần mềm một cách độ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)
4. Trong lập trình web, CORS (Cross-Origin Resource Sharing) dùng để làm gì?
A. Nén dữ liệu để tăng tốc độ tải trang
B. Kiểm soát quyền truy cập tài nguyên giữa các domain khác nhau
C. Mã hóa dữ liệu để bảo mật thông tin
D. Tối ưu hóa hình ảnh để giảm dung lượng
5. Sự khác biệt chính giữa `compile-time` và `run-time` là gì?
A. Compile-time là khi mã được viết, run-time là khi mã được gỡ lỗi
B. Compile-time là khi mã được dịch sang ngôn ngữ máy, run-time là khi mã được thực thi
C. Compile-time là khi mã được thực thi, run-time là khi mã được dịch
D. Không có sự khác biệt giữa compile-time và run-time
6. Điều gì xảy ra khi một hàm đệ quy không có điều kiện dừng?
A. Hàm trả về giá trị mặc định
B. Chương trình bị treo hoặc gây ra lỗi tràn bộ nhớ stack (stack overflow)
C. Hàm thực hiện vô hạn lần nhưng không gây ra lỗi
D. Hàm tự động dừng sau một số lần gọi nhất định
7. Phương pháp lập trình nào tập trung vào việc chia nhỏ bài toán lớn thành các bài toán nhỏ hơn, độc lập và dễ quản lý hơn?
A. Lập trình hướng đối tượng (Object-Oriented Programming)
B. Lập trình cấu trúc (Structured Programming)
C. Lập trình hàm (Functional Programming)
D. Lập trình song song (Parallel Programming)
8. Kiểu dữ liệu nào sau đây không phải là kiểu dữ liệu nguyên thủy (primitive data type) trong hầu hết các ngôn ngữ lập trình?
A. Số nguyên (Integer)
B. Số thực (Float)
C. Chuỗi (String)
D. Ký tự (Character)
9. Thuật ngữ `refactoring` trong lập trình có nghĩa là gì?
A. Viết lại toàn bộ mã nguồn từ đầu
B. Tối ưu hóa mã nguồn để tăng tốc độ thực thi
C. Sửa đổi mã nguồn để cải thiện cấu trúc, tính dễ đọc và bảo trì mà không thay đổi chức năng
D. Thêm các tính năng mới vào phần mềm
10. Trong lập trình hướng đối tượng, tính chất nào cho phép một đối tượng thuộc lớp con có thể thay thế một đối tượng thuộc lớp cha ở bất kỳ đâu?
A. Tính đóng gói (Encapsulation)
B. Tính đa hình (Polymorphism)
C. Tính kế thừa (Inheritance)
D. Tính trừu tượng (Abstraction)
11. Sự khác biệt chính giữa một `stack` và một `queue` là gì?
A. Stack sử dụng bộ nhớ nhiều hơn queue
B. Stack là FIFO (First-In-First-Out), queue là LIFO (Last-In-First-Out)
C. Stack là LIFO (Last-In-First-Out), queue là FIFO (First-In-First-Out)
D. Stack chỉ có thể chứa số nguyên, queue có thể chứa mọi kiểu dữ liệu
12. Trong lập trình web, `session` được sử dụng để làm gì?
A. Lưu trữ dữ liệu tạm thời trên máy chủ để theo dõi trạng thái của người dùng
B. Lưu trữ dữ liệu vĩnh viễn trên máy khách
C. Mã hóa dữ liệu để bảo mật thông tin
D. Tối ưu hóa hình ảnh để giảm dung lượng
13. Khái niệm `Big O notation` được sử dụng để mô tả điều gì?
A. Kích thước của mã nguồn
B. Độ phức tạp của thuật toán
C. Số lượng biến trong chương trình
D. Tốc độ của bộ xử lý
14. Đâu là lợi ích của việc sử dụng `code review`?
A. Tăng tốc độ viết mã
B. Tìm và sửa lỗi sớm, cải thiện chất lượng mã
C. Giảm số lượng dòng mã
D. Tự động tạo tài liệu cho mã
15. Trong lập trình, DRY (Don`t Repeat Yourself) là nguyên tắc gì?
A. Không bao giờ viết mã mà bạn không hiểu
B. Tránh lặp lại mã giống nhau ở nhiều nơi khác nhau
C. Luôn viết tài liệu cho mã của bạn
D. Không bao giờ sử dụng biến toàn cục
16. Trong lập trình, `abstraction` là gì?
A. Ẩn các chi tiết phức tạp và chỉ hiển thị những thông tin cần thiết
B. Tạo ra các đối tượng mới
C. Chuyển đổi kiểu dữ liệu
D. Tìm kiếm lỗi trong mã nguồn
17. Đâu là mục đích chính của việc sử dụng `design patterns`?
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ần mềm thường gặp
C. Giảm số lượng dòng mã
D. Tự động tạo tài liệu cho mã
18. Trong lập trình, `concurrency` là gì?
A. Khả năng thực hiện nhiều tác vụ đồng thời
B. Khả năng mã hóa dữ liệu
C. Khả năng tìm kiếm lỗi trong mã nguồn
D. Khả năng chuyển đổi kiểu dữ liệu
19. Sự khác biệt chính giữa `authentication` và `authorization` là gì?
A. Authentication xác định người dùng là ai, authorization xác định người dùng được phép làm gì
B. Authentication xác định người dùng được phép làm gì, authorization xác định người dùng là ai
C. Authentication là quá trình mã hóa dữ liệu, authorization là quá trình giải mã dữ liệu
D. Không có sự khác biệt giữa authentication và authorization
20. Trong lập trình, `casting` là gì?
A. Quá trình tạo ra các đối tượng mới
B. Chuyển đổi một biến từ kiểu dữ liệu này sang kiểu dữ liệu khác
C. Tìm kiếm lỗi trong mã nguồn
D. Kết hợp nhiều tệp mã nguồn thành một
21. Đâu là mục đích chính của việc sử dụng một Integrated Development Environment (IDE)?
A. Để chạy chương trình nhanh hơn
B. Để đơn giản hóa quá trình phát triển phần mềm bằng cách cung cấp các công cụ hỗ trợ
C. Để tự động viết mã
D. Để dịch mã nguồn sang ngôn ngữ máy
22. Trong lập trình, `deadlock` là gì?
A. Một lỗi cú pháp nghiêm trọng
B. Một tình huống mà hai hoặc nhiều tiến trình bị chặn vĩnh viễn, chờ đợi lẫn nhau để giải phóng tài nguyên
C. Một tình huống mà chương trình chạy quá nhanh
D. Một tình huống mà bộ nhớ bị đầy
23. Trong lập trình, `recursion` là gì?
A. Một vòng lặp vô hạn
B. Một hàm gọi chính nó
C. Một cách để tạo ra các đối tượng mới
D. Một cách để chuyển đổi kiểu dữ liệu
24. Sự khác biệt chính giữa `imperative programming` và `declarative programming` là gì?
A. Imperative programming chỉ định *cách* thực hiện, declarative programming chỉ định *kết quả* mong muốn
B. Imperative programming chỉ định *kết quả* mong muốn, declarative programming chỉ định *cách* thực hiện
C. Imperative programming nhanh hơn declarative programming
D. Imperative programming dễ học hơn declarative programming
25. Độ phức tạp thời gian của thuật toán tìm kiếm nhị phân (binary search) trong trường hợp tốt nhất là bao nhiêu?
A. O(n)
B. O(log n)
C. O(1)
D. O(n^2)
26. Đâu là lợi ích chính của việc sử dụng `microservices architecture`?
A. Tăng tốc độ phát triển và triển khai phần mềm
B. Giảm số lượng dòng mã
C. Tự động tạo tài liệu cho mã
D. Giảm kích thước tệp thực thi
27. Trong lập trình hướng đối tượng, một `interface` là gì?
A. Một lớp trừu tượng không có phương thức nào
B. Một bản thiết kế cho một lớp, định nghĩa các phương thức mà lớp phải thực hiện
C. Một cách để ẩn dữ liệu bên trong một lớp
D. Một cách để tạo ra các đối tượng mới
28. Trong lập trình, `dependency injection` là gì?
A. Một cách để tạo ra các đối tượng mới
B. Một kỹ thuật thiết kế trong đó các dependency được cung cấp cho một đối tượng thay vì đối tượng tự tạo ra chúng
C. Một cách để tìm kiếm lỗi trong mã nguồn
D. Một cách để chuyển đổi kiểu dữ liệu
29. Trong lập trình, `garbage collection` là gì?
A. Một quá trình tự động giải phóng bộ nhớ không còn được sử dụng
B. Một quá trình tìm kiếm lỗi trong mã nguồn
C. Một quá trình tối ưu hóa mã để tăng tốc độ
D. Một quá trình mã hóa dữ liệu để bảo mật
30. Đâu là lợi í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ốc độ biên dịch mã
B. Cho phép nhiều người cùng làm việc trên một dự án mà không gây xung đột
C. Tự động sửa lỗi trong mã nguồn
D. Giảm kích thước tệp thực thi