1. Compiler (trình biên dịch) thực hiện công việc chính nào?
A. Chuyển đổi code từ ngôn ngữ lập trình bậc cao sang ngôn ngữ máy.
B. Chạy trực tiếp code từ ngôn ngữ lập trình bậc cao.
C. Gỡ lỗi code trong quá trình phát triển.
D. Quản lý bộ nhớ cho chương trình.
2. Khái niệm ‘functional programming’ (lập trình hàm) tập trung vào điều gì?
A. Sử dụng các đối tượng và lớp để tổ chức code.
B. Sử dụng các hàm thuần túy (pure functions) và tránh side effects.
C. Sử dụng các biến toàn cục để chia sẻ dữ liệu giữa các hàm.
D. Sử dụng các vòng lặp để thực hiện các tác vụ lặp đi lặp lại.
3. Trong lập trình, ‘race condition’ (điều kiện chạy đua) xảy ra khi nào?
A. Khi hai hoặc nhiều luồng truy cập và thay đổi cùng một dữ liệu đồng thời, dẫn đến kết quả không mong muốn.
B. Khi một chương trình chạy quá chậm.
C. Khi một chương trình sử dụng quá nhiều bộ nhớ.
D. Khi một chương trình cố gắng truy cập vào một vùng bộ nhớ không hợp lệ.
4. Đâu là một lợi ích chính của việc sử dụng ‘microservices architecture’ (kiến trúc microservices)?
A. Đơn giản hóa việc triển khai và bảo trì các ứng dụng lớn và phức tạp bằng cách chia chúng thành các dịch vụ nhỏ, độc lập.
B. Tăng tốc độ thực thi của chương trình.
C. Giảm thiểu số lượng code cần viết.
D. Tối ưu hóa việc sử dụng bộ nhớ.
5. Trong lập trình, ‘exception handling’ (xử lý ngoại lệ) được sử dụng để làm gì?
A. Tăng tốc độ thực thi của chương trình.
B. Xử lý các lỗi và sự cố xảy ra trong quá trình chạy chương trình một cách an toàn và kiểm soát.
C. Tự động tạo tài liệu cho code.
D. Tối ưu hóa việc sử dụng bộ nhớ.
6. Mục đích chính của việc sử dụng ‘design patterns’ (mẫu thiết kế) trong lập trình là gì?
A. Tăng tốc độ thực thi của chương trình.
B. Giải quyết các vấn đề thiết kế phần mềm một cách hiệu quả và tái sử dụng.
C. Giảm thiểu số lượng dòng code cần viết.
D. Đảm bảo tính bảo mật của ứng dụng.
7. Trong lập trình, ‘code refactoring’ (tái cấu trúc code) là gì?
A. Quá trình sửa lỗi trong code.
B. Quá trình thay đổi code để 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 của nó.
C. Quá trình thêm tính năng mới vào code.
D. Quá trình tối ưu hóa code để tăng tốc độ thực thi.
8. Interpreter (trình thông dịch) khác với compiler (trình biên dịch) ở điểm nào?
A. Interpreter tạo ra file thực thi độc lập, còn compiler thì không.
B. Interpreter dịch và thực thi code từng dòng một, còn compiler dịch toàn bộ code trước khi thực thi.
C. Interpreter chỉ được sử dụng cho ngôn ngữ lập trình hàm, còn compiler cho ngôn ngữ lập trình hướng đối tượng.
D. Interpreter có khả năng tối ưu hóa code tốt hơn compiler.
9. Chức năng chính của một ‘linker’ (trình liên kết) trong quá trình biên dịch là gì?
A. Kiểm tra lỗi cú pháp trong code.
B. Tối ưu hóa code để tăng hiệu suất.
C. Kết hợp các module code đã được biên dịch thành một file thực thi duy nhất.
D. Quản lý bộ nhớ cho chương trình.
10. Kiểu dữ liệu ‘abstract data type’ (ADT) là gì?
A. Kiểu dữ liệu chỉ chứa các số nguyên.
B. Kiểu dữ liệu chỉ chứa các số thực.
C. 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 thực hiện.
D. Kiểu dữ liệu được định nghĩa sẵn trong ngôn ngữ lập trình.
11. Trong lập trình, ‘deadlock’ (bế tắc) xảy ra khi nào?
A. Khi một chương trình gặp lỗi và bịCrash.
B. Khi hai hoặc nhiều tiến trình cùng 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. Khi bộ nhớ bị đầy và chương trình không thể cấp phát thêm bộ nhớ.
D. Khi một biến được truy cập đồng thời bởi nhiều luồng mà không có cơ chế đồng bộ hóa.
12. Khái niệm ‘side effect’ (tác dụng phụ) trong lập trình hàm đề cập đến điều gì?
A. Một lỗi xảy ra trong quá trình biên dịch.
B. Một hàm thay đổi trạng thái bên ngoài phạm vi của nó.
C. Một hàm trả về nhiều giá trị.
D. Một hàm không trả về giá trị nào.
13. Trong lập trình hướng đối tượng, ‘polymorphism’ (tính đa hình) thể hiện điều gì?
A. Khả năng một đối tượng thuộc nhiều lớp khác nhau.
B. Khả năng một lớp có nhiều thuộc tính và phương thức.
C. Khả năng một đối tượng có thể có nhiều trạng thái khác nhau.
D. Khả năng một đối tượng có thể được xem như là thể hiện của nhiều kiểu dữ liệu khác nhau.
14. Nguyên tắc ‘Don’t Repeat Yourself’ (DRY) trong lập trình hướng tới mục tiêu chính nào?
A. Tăng cường tính bảo mật của ứng dụng.
B. Giảm thiểu sự trùng lặp code, giúp code dễ bảo trì và sửa đổi hơn.
C. Tối ưu hóa hiệu suất thực thi của chương trình.
D. Đảm bảo tính tương thích với nhiều hệ điều hành.
15. Nguyên tắc ‘separation of concerns’ (SoC) trong thiết kế phần mềm khuyến khích điều gì?
A. Gộp tất cả các chức năng liên quan vào một module duy nhất.
B. Chia phần mềm thành các module riêng biệt, mỗi module chịu trách nhiệm cho một chức năng cụ thể.
C. Sử dụng càng ít thư viện bên ngoài càng tốt.
D. Tối ưu hóa code để giảm thiểu sử dụng bộ nhớ.
16. Khái niệm ‘concurrency’ (tính đồng thời) trong lập trình đề cập đến điều gì?
A. Khả năng một chương trình chạy trên nhiều hệ điều hành khác nhau.
B. Khả năng một chương trình thực hiện nhiều tác vụ cùng một lúc, có thể song song hoặc xen kẽ.
C. Khả năng một chương trình tự động sửa lỗi khi gặp sự cố.
D. Khả năng một chương trình sử dụng nhiều ngôn ngữ lập trình khác nhau.
17. Trong ngữ cảnh ngôn ngữ lập trình, ‘type inference’ (suy luận kiểu) là gì?
A. Quá trình kiểm tra xem kiểu dữ liệu của biến có phù hợp với giá trị được gán hay không.
B. Khả năng của trình biên dịch tự động xác định kiểu dữ liệu của một biến dựa trên cách nó được sử dụng.
C. Quá trình chuyển đổi một kiểu dữ liệu sang một kiểu dữ liệu khác.
D. Khả năng định nghĩa các kiểu dữ liệu mới.
18. Ưu điểm chính của việc sử dụng ‘recursion’ (đệ quy) trong lập trình là gì?
A. Tăng hiệu suất thực thi của chương trình.
B. Giảm thiểu sử dụng bộ nhớ.
C. Giải quyết các bài toán có cấu trúc đệ quy một cách tự nhiên và dễ hiểu.
D. Đơn giản hóa quá trình gỡ lỗi.
19. Kỹ thuật ‘currying’ trong lập trình hàm là gì?
A. Kỹ thuật tối ưu hóa vòng lặp để tăng tốc độ thực thi.
B. Kỹ thuật chuyển đổi một hàm nhiều tham số thành một chuỗi các hàm một tham số.
C. Kỹ thuật quản lý bộ nhớ tự động để tránh rò rỉ bộ nhớ.
D. Kỹ thuật kiểm tra kiểu dữ liệu tại thời điểm biên dịch.
20. Đâu là mục đích chính của việc sử dụng ‘unit testing’ (kiểm thử đơn vị)?
A. Kiểm tra xem phần mềm có tương thích với các hệ điều hành khác nhau hay không.
B. Kiểm tra xem các module code riêng lẻ có hoạt động đúng như mong đợi hay không.
C. Kiểm tra hiệu suất của toàn bộ hệ thống.
D. Kiểm tra tính bảo mật của ứng dụng.
21. Sự khác biệt chính giữa ‘static typing’ (kiểm tra kiểu tĩnh) và ‘dynamic typing’ (kiểm tra kiểu động) là gì?
A. Static typing chỉ được sử dụng cho ngôn ngữ biên dịch, còn dynamic typing cho ngôn ngữ thông dịch.
B. Static typing kiểm tra kiểu dữ liệu tại thời điểm biên dịch, còn dynamic typing kiểm tra kiểu dữ liệu tại thời điểm chạy.
C. Static typing cho phép sử dụng ít kiểu dữ liệu hơn dynamic typing.
D. Static typing giúp code dễ đọc hơn dynamic typing.
22. Mục đích chính của việc sử dụng ‘dependency injection’ (DI) (tiêm phụ thuộc) là gì?
A. Tăng tốc độ thực thi của chương trình.
B. Giảm sự phụ thuộc giữa các module code, giúp code dễ kiểm tra, bảo trì và tái sử dụng hơn.
C. Tự động tạo tài liệu cho code.
D. Tối ưu hóa việc sử dụng bộ nhớ.
23. Đặc điểm nào sau đây KHÔNG phải là ưu điểm của việc sử dụng ngôn ngữ lập trình bậc cao so với ngôn ngữ lập trình bậc thấp?
A. Dễ đọc và viết hơn.
B. Tính trừu tượng cao hơn.
C. Dễ dàng quản lý bộ nhớ hơn.
D. Hiệu suất thực thi thường cao hơn.
24. Trong lập trình, ‘memory leak’ (rò rỉ bộ nhớ) xảy ra khi nào?
A. Khi chương trình sử dụng quá nhiều bộ nhớ.
B. Khi chương trình không giải phóng bộ nhớ đã cấp phát sau khi không còn sử dụng nữa.
C. Khi chương trình cố gắng truy cập vào một vùng bộ nhớ không hợp lệ.
D. Khi chương trình gặp lỗi và bị crash.
25. Đâu là một 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 biên dịch code.
B. Cho phép nhiều người cùng làm việc trên một dự án một cách hiệu quả và theo dõi thay đổi.
C. Tối ưu hóa hiệu suất của chương trình.
D. Tự động tạo tài liệu cho code.
26. Trong lập trình hàm, ‘immutable data’ (dữ liệu bất biến) có nghĩa là gì?
A. Dữ liệu không thể được lưu trữ trên ổ cứng.
B. Dữ liệu không thể được thay đổi sau khi đã được tạo.
C. Dữ liệu chỉ có thể được truy cập bởi một hàm duy nhất.
D. Dữ liệu chỉ có thể được đọc, không thể được ghi.
27. Trong lập trình, ‘callback function’ (hàm gọi lại) là gì?
A. Một hàm được gọi tự động khi chương trình khởi động.
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.
28. Trong lập trình hướng đối tượng, ‘inheritance’ (tính 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 bộ nhớ của một đối tượng 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. Một đối tượng có thể thay đổi kiểu dữ liệu của nó trong quá trình chạy.
D. Một hàm có thể gọi chính nó.
29. Khái niệm ‘garbage collection’ (thu gom rác) trong lập trình là gì?
A. Quá trình dọn dẹp các file tạm trong hệ điều hành.
B. Quá trình tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình.
C. Quá trình tối ưu hóa code để giảm thiểu sử dụng bộ nhớ.
D. Quá trình kiểm tra và sửa lỗi bộ nhớ trong chương trình.
30. Đâu là lợi ích chính của việc sử dụng ‘code review’ (duyệt code)?
A. Tăng tốc độ thực thi của chương trình.
B. Giúp phát hiện lỗi, cải thiện chất lượng code và chia sẻ kiến thức giữa các thành viên trong nhóm.
C. Tự động tạo tài liệu cho code.
D. Tối ưu hóa việc sử dụng bộ nhớ.
31. Đâu là lợi ích chính của việc sử dụng hàm (function) trong lập trình?
A. Làm cho mã khó đọc hơn
B. Tăng kích thước của chương trình
C. Cho phép tái sử dụng mã và chia chương trình thành các phần nhỏ hơn
D. Giảm hiệu suất của chương trình
32. Trong lập trình, ‘recursion’ (đệ quy) 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 để sắp xếp dữ liệu
D. Một kỹ thuật để tối ưu hóa bộ nhớ
33. Kiểu dữ liệu nào thường được sử dụng để biểu diễn các giá trị logic (true/false) trong nhiều ngôn ngữ lập trình?
A. Integer
B. Float
C. Boolean
D. String
34. Trong lập trình hàm (functional programming), ‘immutability’ (tính bất biến) có nghĩa là gì?
A. Các biến không thể được khai báo
B. Giá trị của một biến không thể thay đổi sau khi đã được gán
C. Các hàm không thể trả về giá trị
D. Chương trình không thể kết thúc
35. Đâu là một lợi ích chính của việc sử dụng ‘containerization’ (ví dụ: Docker) trong phát triển phần mềm?
A. Tăng tốc độ biên dịch mã
B. Đảm bảo tính nhất quán của môi trường giữa các giai đoạn phát triển, kiểm thử và triển khai
C. Giảm kích thước của mã nguồn
D. Loại bỏ sự cần thiết phải kiểm thử phần mềm
36. Trong bảo mật phần mềm, ‘buffer overflow’ (tràn bộ đệm) là gì?
A. Một lỗi trong đó chương trình sử dụng quá nhiều bộ nhớ
B. Một lỗi trong đó dữ liệu được ghi vượt quá kích thước của bộ đệm được cấp phát, ghi đè lên các vùng nhớ lân cận
C. Một lỗi trong đó chương trình không giải phóng bộ nhớ
D. Một lỗi trong đó chương trình truy cập vào bộ nhớ không được phép
37. Trong lập trình hướng đối tượng (OOP), ‘inheritance’ (kế thừa) cho phép điều gì?
A. Tạo ra các đối tượng độc lập hoàn toàn
B. 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
C. Ngăn chặn việc sử dụng lại mã
D. Giới hạn khả năng mở rộng của chương trình
38. 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. Availability, Capacity, Integrity, Delivery
D. Authorization, Configuration, Integration, Distribution
39. Nguyên tắc ‘Don’t Repeat Yourself’ (DRY) khuyến khích điều gì trong lập trình?
A. Lặp lại mã để tăng tính dễ đọc
B. Viết mã càng dài càng tốt
C. Tránh trùng lặp mã bằng cách sử dụng abstraction
D. Sử dụng các biến toàn cục một cách rộng rãi
40. Trong ngữ cảnh của API (Application Programming Interface), REST là gì?
A. Một ngôn ngữ lập trình
B. Một kiểu kiến trúc phần mềm cho việc xây dựng các dịch vụ web
C. Một giao thức bảo mật
D. Một hệ thống quản lý cơ sở dữ liệu
41. Trong lĩnh vực machine learning, ‘overfitting’ (quá khớp) là gì?
A. Một tình huống trong đó mô hình hoạt động kém trên dữ liệu huấn luyện
B. Một tình huống trong đó mô hình hoạt động tốt trên dữ liệu huấn luyện nhưng kém trên dữ liệu mới
C. Một tình huống trong đó mô hình hoạt động tốt trên cả dữ liệu huấn luyện và dữ liệu mới
D. Một tình huống trong đó mô hình không thể học được từ dữ liệu
42. Trong ngữ cảnh của ngôn ngữ lập trình, ‘syntax’ đề cập đến điều gì?
A. Ý nghĩa của các câu lệnh
B. Thứ tự thực hiện các câu lệnh
C. Quy tắc cấu trúc của ngôn ngữ
D. Hiệu quả của việc thực thi chương trình
43. Đâu là một lợi ích của việc sử dụng ‘design patterns’ (mẫu thiết kế) trong phát triển phần mềm?
A. Chúng luôn làm cho mã nhanh hơn
B. Chúng cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế phổ biến
C. Chúng loại bỏ sự cần thiết phải kiểm thử mã
D. Chúng làm cho mã khó hiểu hơn
44. Trong lập trình đa luồng (multithreading), ‘race condition’ xảy ra khi nào?
A. Khi các luồng không đồng bộ hóa với nhau
B. Khi nhiều luồng truy cập và sửa đổi cùng một dữ liệu chia sẻ đồng thời
C. Khi một luồng chờ đợi một tài nguyên mà không bao giờ được giải phóng
D. Khi các luồng chạy quá nhanh
45. Phân tích cú pháp (parsing) trong trình biên dịch (compiler) có vai trò gì?
A. Tối ưu hóa mã
B. Chuyển đổi mã nguồn thành mã máy
C. Kiểm tra tính hợp lệ cú pháp của mã nguồn
D. Liên kết các thư viện bên ngoài
46. Chức năng chính của một ‘linker’ (trình liên kết) trong quá trình biên dịch là gì?
A. Kiểm tra lỗi cú pháp
B. Tối ưu hóa mã
C. Kết hợp các module đối tượng và thư viện để tạo thành một chương trình thực thi
D. Phân bổ bộ nhớ cho chương trình
47. Trong lĩnh vực ngôn ngữ lập trình, ‘metaprogramming’ là gì?
A. Lập trình mà không sử dụng bất kỳ ngôn ngữ lập trình nào
B. Lập trình để viết các chương trình có thể thao tác hoặc tạo ra các chương trình khác
C. Lập trình chỉ sử dụng các hàm toán học
D. Lập trình chỉ dành cho các hệ thống nhúng
48. Trong thiết kế hướng đối tượng, nguyên tắc ‘Liskov Substitution Principle’ (LSP) nói về điều gì?
A. Mọi lớp con phải có thể thay thế cho lớp cha của nó mà không làm thay đổi tính đúng đắn của chương trình
B. Mỗi lớp chỉ nên có một trách nhiệm duy nhất
C. Các đối tượng nên được mở để mở rộng nhưng đóng để sửa đổi
D. Phụ thuộc vào abstraction, không phụ thuộc vào implementation
49. Điểm khác biệt chính giữa ‘pass by value’ và ‘pass by reference’ khi truyền tham số cho một hàm là gì?
A. ‘Pass by value’ tạo một bản sao của tham số, trong khi ‘pass by reference’ truyền địa chỉ bộ nhớ của tham số
B. ‘Pass by reference’ tạo một bản sao của tham số, trong khi ‘pass by value’ truyền địa chỉ bộ nhớ của tham số
C. Cả hai đều tạo bản sao của tham số
D. Cả hai đều truyền địa chỉ bộ nhớ của tham số
50. Trong ngôn ngữ lập trình, ‘scope’ (phạm vi) của một biến xác định điều gì?
A. Kiểu dữ liệu của biến
B. Vùng mã mà biến có thể được truy cập
C. Giá trị ban đầu của biến
D. Địa chỉ bộ nhớ của biến
51. Trong lĩnh vực phát triển web, CORS (Cross-Origin Resource Sharing) giải quyết vấn đề gì?
A. Vấn đề bảo mật liên quan đến việc lưu trữ mật khẩu
B. Vấn đề trình duyệt chặn các yêu cầu HTTP từ một nguồn gốc (origin) khác đến một nguồn gốc khác
C. Vấn đề liên quan đến hiệu suất của trang web
D. Vấn đề liên quan đến khả năng tương thích giữa các trình duyệt
52. Trong ngữ cảnh của microservices, ‘API Gateway’ có vai trò gì?
A. Để quản lý cơ sở dữ liệu
B. Để cung cấp một điểm truy cập duy nhất cho tất cả các microservices
C. Để triển khai các microservices
D. Để giám sát hiệu suất của các microservices
53. Đâu là mục đích chính của việc sử dụng ‘version control system’ (hệ thống quản lý phiên bản) như Git?
A. Để tăng tốc độ thực thi chương trình
B. Để quản lý và theo dõi các thay đổi trong mã nguồn theo thời gian
C. Để tự động tạo tài liệu cho mã
D. Để tối ưu hóa việc sử dụng bộ nhớ
54. Sự khác biệt chính giữa ngôn ngữ biên dịch (compiled language) và ngôn ngữ thông dịch (interpreted language) là gì?
A. Ngôn ngữ biên dịch chạy nhanh hơn ngôn ngữ thông dịch
B. Ngôn ngữ biên dịch được chuyển đổi thành mã máy trước khi thực thi, trong khi ngôn ngữ thông dịch được thực thi trực tiếp từng dòng một
C. Ngôn ngữ thông dịch dễ gỡ lỗi hơn ngôn ngữ biên dịch
D. Ngôn ngữ biên dịch có thể chạy trên nhiều nền tảng hơn ngôn ngữ thông dịch
55. Sự khác biệt chính giữa kiểm thử ‘white box’ và ‘black box’ là gì?
A. Kiểm thử white box nhanh hơn kiểm thử black box
B. Kiểm thử white box yêu cầu kiến thức về cấu trúc bên trong của mã, trong khi kiểm thử black box thì không
C. Kiểm thử black box toàn diện hơn kiểm thử white box
D. Kiểm thử white box chỉ được sử dụng cho các ứng dụng web
56. Trong quản lý bộ nhớ, ‘garbage collection’ (thu gom rác) là gì?
A. Một kỹ thuật để tối ưu hóa tốc độ truy cập bộ nhớ
B. Một quá trình tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình
C. Một phương pháp để ngăn chặn rò rỉ bộ nhớ
D. Một kỹ thuật để phân bổ bộ nhớ một cách hiệu quả
57. Bộ nhớ ‘stack’ (ngăn xếp) thường được sử dụng để lưu trữ cái gì trong quá trình thực thi chương trình?
A. Các biến toàn cục
B. Các biến động được cấp phát bằng ‘new’ hoặc ‘malloc’
C. Các lệnh của chương trình
D. Các biến cục bộ và thông tin về lời gọi hàm
58. Đâu là mục đích chính của việc sử dụng comments (chú thích) trong mã nguồn?
A. Để tăng tốc độ thực thi chương trình
B. Để làm cho mã nguồn khó đọc hơn
C. Để cung cấp giải thích và tài liệu cho mã
D. Để giảm kích thước tệp của mã nguồn
59. Kiểu dữ liệu trừu tượng (Abstract Data Type – ADT) là gì?
A. Một kiểu dữ liệu cụ thể được xây dựng sẵn trong ngôn ngữ
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ó và các thuộc tính của nó, không phụ thuộc vào cách nó được triển khai
C. Một kiểu dữ liệu không thể thay đổi
D. Một kiểu dữ liệu chỉ có thể được sử dụng trong một số ngôn ngữ lập trình nhất định
60. Trong phát triển phần mềm, ‘technical debt’ (nợ kỹ thuật) đề cập đến điều gì?
A. Số tiền mà một công ty nợ cho các dịch vụ phần mềm
B. Hậu quả của việc đưa ra các quyết định thiết kế hoặc mã hóa không tối ưu trong ngắn hạn, dẫn đến các vấn đề trong tương lai
C. Số lượng lỗi còn tồn tại trong một phần mềm
D. Thời gian cần thiết để sửa tất cả các lỗi trong một phần mềm
61. Trong lập trình đa luồng (Multithreading), ‘Deadlock’ xảy ra khi nào?
A. Một luồng cố gắng truy cập vào một vùng nhớ không hợp lệ.
B. Các luồng tranh chấp nhau để giành quyền truy cập vào một tài nguyên.
C. Hai hoặc nhiều luồng chờ đợi lẫn nhau để giải phóng tài nguyên.
D. Một luồng bị treo do lỗi trong mã nguồn.
62. Khi nào nên sử dụng ‘Abstract Class’ thay vì ‘Interface’ trong thiết kế hướng đối tượng?
A. Khi cần định nghĩa một contract mà các lớp triển khai phải tuân thủ.
B. Khi cần cung cấp một số hành vi mặc định cho các lớp con.
C. Khi muốn đảm bảo rằng một lớp không thể được khởi tạo.
D. Khi muốn tạo ra một kiểu dữ liệu mới.
63. 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 kế thừa các thuộc tính và phương thức của lớp cha?
A. Đóng gói (Encapsulation).
B. Kế thừa (Inheritance).
C. Đa hình (Polymorphism).
D. Trừu tượng (Abstraction).
64. Trong lập trình hàm (Functional Programming), khái niệm ‘Pure Function’ (hàm thuần túy) có nghĩa là gì?
A. Hàm không có tác dụng phụ (side effect) và luôn trả về cùng một kết quả cho cùng một đầu vào.
B. Hàm chỉ được phép gọi một lần duy nhất trong chương trình.
C. Hàm không được phép sử dụng bất kỳ biến toàn cục nào.
D. Hàm phải được viết bằng ngôn ngữ lập trình hàm (ví dụ: Haskell, Lisp).
65. Đâu là một trong những lợi ích của việc sử dụng ‘Dependency Injection’ (DI)?
A. Giảm sự phụ thuộc giữa các thành phần của ứng dụng.
B. Tăng tốc độ biên dịch.
C. Giảm kích thước mã nguồn.
D. Tăng cường bảo mật.
66. Phương pháp nào sau đây giúp giảm thiểu rủi ro xung đột khi nhiều lập trình viên cùng làm việc trên một dự án?
A. Sử dụng một trình soạn thảo văn bản duy nhất.
B. Sử dụng hệ thống quản lý phiên bản (Version Control System).
C. Viết code càng ít càng tốt.
D. Làm việc độc lập và không giao tiếp với người khác.
67. Trong ngữ cảnh lập trình, ‘Idempotent’ có nghĩa là gì?
A. Một thao tác chỉ được thực hiện một lần duy nhất.
B. Một thao tác có thể được thực hiện nhiều lần mà không gây ra tác dụng phụ ngoài ý muốn.
C. Một thao tác luôn trả về kết quả giống nhau, bất kể đầu vào.
D. Một thao tác không bao giờ gây ra lỗi.
68. Trong lập trình hướng đối tượng, ‘Composition’ khác với ‘Inheritance’ như thế nào?
A. Composition tạo ra mối quan hệ ‘is-a’, trong khi Inheritance tạo ra mối quan hệ ‘has-a’.
B. Composition tạo ra mối quan hệ ‘has-a’, trong khi Inheritance tạo ra mối quan hệ ‘is-a’.
C. Composition cho phép tái sử dụng code, trong khi Inheritance thì không.
D. Inheritance cho phép tái sử dụng code, trong khi Composition thì không.
69. Cơ chế ‘Garbage Collection’ trong một số ngôn ngữ lập trình (ví dụ: Java, C#) có chức năng gì?
A. Tự động quản lý bộ nhớ bằng cách giải phóng bộ nhớ không còn được sử dụng.
B. Tối ưu hóa hiệu suất của chương trình bằng cách sắp xếp lại mã.
C. Kiểm tra lỗi cú pháp trong quá trình biên dịch.
D. Quản lý các kết nối mạng của ứng dụng.
70. Đâ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 biên dịch mã nguồn thành mã máy.
B. Theo dõi và quản lý các thay đổi của mã nguồn theo thời gian.
C. Tối ưu hóa hiệu suất của ứng dụng.
D. Quản lý cơ sở dữ liệu của ứng dụng.
71. Phương pháp lập trình ‘Test-Driven Development’ (TDD) được thực hiện theo quy trình nào?
A. Viết code -> Viết test -> Chạy test.
B. Viết test -> Viết code -> Chạy test.
C. Chạy test -> Viết code -> Viết test.
D. Viết code -> Chạy test -> Viết test.
72. Trong lập trình bất đồng bộ (Asynchronous Programming), ‘Promise’ (hoặc ‘Future’) được sử dụng để làm gì?
A. Đại diện cho một giá trị có thể chưa có sẵn tại thời điểm hiện tại.
B. Tạo ra một luồng mới.
C. Đồng bộ hóa các luồng.
D. Quản lý bộ nhớ.
73. Đâu là mục đích chính của việc sử dụng ‘Design Patterns’ trong phát triển phần mềm?
A. Tăng tốc độ biên dịch của 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ả.
C. Giảm kích thước của mã nguồn.
D. Tăng cường bảo mật cho ứng dụng.
74. Kỹ thuật ‘Refactoring’ trong lập trình 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 hiệu suất.
C. Cấu trúc lại mã nguồn mà không thay đổi chức năng bên ngoài.
D. Thêm các tính năng mới vào ứng dụng.
75. Nguyên tắc ‘Don’t Repeat Yourself’ (DRY) trong lập trình hướng đến mục tiêu chính nào?
A. Tăng tính phức tạp của mã nguồn để tránh sao chép.
B. Giảm thiểu sự trùng lặp mã nguồn để dễ bảo trì và sửa đổi.
C. Tối đa hóa số lượng dòng code để tăng hiệu suất.
D. Sử dụng các thư viện bên ngoài càng nhiều càng tốt.
76. Đặc điểm nào sau đây KHÔNG phải là ưu điểm của việc sử dụng ngôn ngữ lập trình bậc cao?
A. Dễ đọc và dễ viết hơn so với ngôn ngữ bậc thấp.
B. Tính di động cao, có thể chạy trên nhiều nền tảng khác nhau.
C. Hiệu suất thực thi thường cao hơn so với ngôn ngữ bậc thấp.
D. Cung cấp nhiều thư viện và framework hỗ trợ.
77. Đâu là lợi ích chính của việc sử dụng ‘Code Review’ trong quy trình phát triển phần mềm?
A. Tăng tốc độ viết code.
B. Phát hiện sớm các lỗi và cải thiện chất lượng code.
C. Giảm chi phí phát triển.
D. Tự động viết tài liệu cho code.
78. Trong ngữ cảnh của ngôn ngữ lập trình, ‘Scope’ (phạm vi) của một biến đề cập đến điều gì?
A. Thời gian tồn tại của biến trong bộ nhớ.
B. Kích thước bộ nhớ mà biến chiếm giữ.
C. Vùng mã nguồn mà biến có thể được truy cập.
D. Kiểu dữ liệu của biến.
79. Đâu là nhược điểm chính của mô hình phát triển phần mềm ‘Waterfall’?
A. Khó thích ứng với các thay đổi yêu cầu trong quá trình phát triển.
B. Đòi hỏi sự tham gia liên tục của khách hàng.
C. Thời gian phát triển rất ngắn.
D. Chi phí phát triển rất thấp.
80. Kỹ thuật lập trình ‘Memoization’ được sử dụng để làm gì?
A. Tăng cường bảo mật cho ứng dụng.
B. Lưu trữ kết quả của các hàm tốn thời gian để tính toán và trả về kết quả đã lưu trữ khi được gọi lại với cùng đầu vào.
C. Giảm kích thước của mã nguồn.
D. Tối ưu hóa việc sử dụng bộ nhớ.
81. Đâu là một trong những nguyên tắc chính của ‘SOLID’ trong thiết kế hướng đối tượng?
A. Keep It Simple, Stupid (KISS).
B. Don’t Repeat Yourself (DRY).
C. Single Responsibility Principle (SRP).
D. You Ain’t Gonna Need It (YAGNI).
82. Đâu là lợi ích của việc sử dụng ‘Continuous Integration’ (CI) trong quy trình phát triển phần mềm?
A. Tự động hóa quá trình kiểm thử và tích hợp mã nguồn.
B. Tăng tốc độ viết code.
C. Giảm số lượng lập trình viên cần thiết cho dự án.
D. Loại bỏ hoàn toàn các lỗi trong mã nguồn.
83. Kiểu dữ liệu ‘Union’ trong ngôn ngữ lập trình C cho phép điều gì?
A. Lưu trữ nhiều giá trị khác kiểu dữ liệu trong cùng một vùng nhớ.
B. Tạo ra một kiểu dữ liệu mới bằng cách kết hợp nhiều kiểu dữ liệu khác nhau.
C. Định nghĩa một hằng số không thể thay đổi giá trị.
D. Tạo ra một mảng các biến có cùng kiểu dữ liệu.
84. Trong kiến trúc RESTful, phương thức HTTP nào thường được sử dụng để cập nhật một phần của tài nguyên?
A. GET.
B. POST.
C. PUT.
D. PATCH.
85. Trong lập trình web, ‘Cross-Site Scripting’ (XSS) là một loại tấn công như thế nào?
A. Tấn công từ chối dịch vụ (Denial of Service).
B. Chèn mã độc vào website để thực thi trên trình duyệt của người dùng khác.
C. Đánh cắp thông tin đăng nhập của người dùng.
D. Tấn công vào cơ sở dữ liệu của website.
86. Ưu điểm chính của việc sử dụng ‘Microservices Architecture’ là gì?
A. Giảm độ phức tạp của hệ thống.
B. Tăng tính độc lập và khả năng mở rộng của các thành phần.
C. Giảm chi phí phát triển phần mềm.
D. Tăng tốc độ phát triển phần mềm.
87. Trong lập trình hướng sự kiện (Event-Driven Programming), vai trò của ‘Event Loop’ là gì?
A. Quản lý bộ nhớ.
B. Xử lý các sự kiện và gọi các hàm xử lý tương ứng.
C. Tối ưu hóa hiệu suất.
D. Kiểm tra lỗi cú pháp.
88. Trong bảo mật phần mềm, ‘SQL Injection’ là một loại tấn công lợi dụng lỗ hổng nào?
A. Lỗi tràn bộ đệm (Buffer overflow).
B. Lỗi xác thực (Authentication bypass).
C. Lỗi trong truy vấn cơ sở dữ liệu.
D. Lỗi trong xử lý phiên (Session management).
89. Kiểu tham số nào cho phép hàm thay đổi giá trị của biến được truyền vào từ bên ngoài hàm?
A. Tham trị (Pass by value).
B. Tham chiếu (Pass by reference).
C. Tham số mặc định (Default parameter).
D. Tham số tùy chọn (Optional parameter).
90. Trong kiểm thử phần mềm, ‘Regression Testing’ được thực hiện khi nào?
A. Khi phát triển một tính năng mới.
B. Sau khi sửa lỗi hoặc thay đổi mã nguồn.
C. Trước khi triển khai ứng dụng.
D. Trong quá trình thiết kế ứng dụng.
91. Trong lập trình đồng thời, ‘deadlock’ là gì?
A. Một tình huống trong đó 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.
B. Một lỗi trong chương trình dẫn đến treo máy.
C. Một tình huống trong đó một tiến trình chiếm dụng quá nhiều bộ nhớ.
D. Một loại tấn công từ chối dịch vụ.
92. Đâu là một trong những lợi ích chính của việc sử dụng ‘version control system’ (VCS) như Git?
A. Tự động tạo tài liệu cho dự án.
B. Cho phép nhiều người cùng làm việc trên một dự án một cách hiệu quả và theo dõi các thay đổi.
C. Tăng tốc độ biên dịch mã.
D. Cải thiện hiệu suất thực thi của ứng dụng.
93. Kỹ thuật ‘memoization’ được sử dụng để làm gì trong lập trình?
A. Để giảm dung lượng bộ nhớ sử dụng.
B. Để tăng tốc độ thực thi bằng cách lưu trữ kết quả của các lệnh gọi hàm tốn kém và trả về kết quả đã lưu trữ khi đầu vào lặp lại.
C. Để mã hóa dữ liệu.
D. Để đơn giản hóa quá trình gỡ lỗi.
94. Trong kiến trúc microservices, mỗi microservice nên đảm nhận trách nhiệm gì?
A. Một nghiệp vụ kinh doanh duy nhất, được triển khai và quản lý độc lập.
B. Quản lý toàn bộ cơ sở dữ liệu của ứng dụng.
C. Xử lý tất cả các yêu cầu từ người dùng.
D. Cung cấp giao diện người dùng cho ứng dụng.
95. Đặc điểm nào sau đây là quan trọng nhất của một ngôn ngữ lập trình bậc cao?
A. Khả năng tương tác trực tiếp với phần cứng.
B. Tính dễ đọc và dễ hiểu đối với con người.
C. Hiệu suất thực thi tối đa.
D. Khả năng quản lý bộ nhớ thủ công.
96. Đâu là một trong những lợi ích chính của việc sử dụng ‘microservices’ so với kiến trúc monolithic?
A. Dễ dàng triển khai và mở rộng quy mô các thành phần riêng lẻ.
B. Hiệu suất thực thi cao hơn.
C. Chi phí phát triển thấp hơn.
D. Dễ dàng bảo trì hơn.
97. 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. Availability, Consistency, Interoperability, Durability.
D. Authorization, Confidentiality, Integrity, Deniability.
98. Đâu là một trong những mục tiêu chính của việc sử dụng ‘SOLID principles’ trong thiết kế hướng đối tượng?
A. Để tạo ra mã dễ đọc và dễ hiểu.
B. Để tạo ra mã dễ bảo trì, mở rộng và tái sử dụng.
C. Để tăng tốc độ thực thi của chương trình.
D. Để giảm dung lượng bộ nhớ sử dụng.
99. Trong lập trình bất đồng bộ, ‘promise’ được sử dụng để làm gì?
A. Để lưu trữ dữ liệu tạm thời.
B. Để biểu diễn kết quả cuối cùng (thành công hoặc thất bại) của một hoạt động bất đồng bộ.
C. Để tạo ra một luồng (thread) mới.
D. Để mã hóa dữ liệu.
100. Phương pháp lập trình ‘Test-Driven Development’ (TDD) hoạt động như thế nào?
A. Viết test case trước khi viết code, sau đó viết code để vượt qua các test case.
B. Viết code trước, sau đó viết test case để kiểm tra code.
C. Viết test case và code đồng thời.
D. Không cần viết test case, chỉ tập trung vào viết code.
101. Trong lập trình, ‘refactoring’ là gì?
A. Viết lại toàn bộ code từ đầu.
B. Cải thiện cấu trúc code mà không thay đổi chức năng bên ngoài.
C. Thêm tính năng mới vào chương trình.
D. Sửa lỗi trong chương trình.
102. Đâu là mục tiêu chính của việc sử dụng ‘design patterns’ trong phát triển phần mềm?
A. Tăng tốc độ viết code.
B. Cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế thường gặp.
C. Giảm số lượng dòng code.
D. Đảm bảo tính bảo mật của ứng dụng.
103. Điểm khác biệt chính giữa ‘pass by value’ và ‘pass by reference’ trong việc truyền tham số cho hàm là gì?
A. ‘Pass by value’ tạo ra một bản sao của tham số, trong khi ‘pass by reference’ truyền trực tiếp địa chỉ bộ nhớ của tham số.
B. ‘Pass by value’ chỉ áp dụng cho kiểu dữ liệu nguyên thủy, còn ‘pass by reference’ áp dụng cho đối tượng.
C. ‘Pass by value’ nhanh hơn ‘pass by reference’.
D. ‘Pass by value’ an toàn hơn ‘pass by reference’.
104. Đâu là lợi ích chính của việc sử dụng ‘garbage collection’ trong ngôn ngữ lập trình?
A. Tăng tốc độ thực thi chương trình.
B. Giảm thiểu nguy cơ rò rỉ bộ nhớ.
C. Đơn giản hóa quá trình biên dịch mã.
D. Cải thiện tính bảo mật của ứng dụng.
105. Trong lập trình hướng đối tượng, ‘polymorphism’ (tính đa hình) cho phép điều gì?
A. Một đối tượng có thể có nhiều thuộc tính.
B. Một đối tượng có thể thuộc nhiều lớp khác nhau.
C. Một đối tượng có thể được sử dụng thay thế cho một đối tượng khác nếu chúng có cùng giao diện.
D. Một lớp có thể kế thừa từ nhiều lớp khác nhau.
106. Nguyên tắc ‘Don’t Repeat Yourself’ (DRY) trong lập trình hướng đến mục tiêu chính nào?
A. Tăng cường khả năng tái sử dụng mã và giảm sự dư thừa.
B. Tối ưu hóa hiệu suất thực thi của chương trình.
C. Đảm bảo tính bảo mật của dữ liệu.
D. Đơn giản hóa quá trình gỡ lỗi.
107. Mục đích chính của việc sử dụng ‘caching’ trong ứng dụng web là gì?
A. Để tăng tính bảo mật của dữ liệu.
B. Để giảm tải cho máy chủ và cải thiện thời gian phản hồi của ứng dụng.
C. Để đơn giản hóa quá trình triển khai ứng dụng.
D. Để cải thiện SEO (Search Engine Optimization).
108. Trong bảo mật ứng dụng web, ‘SQL injection’ là gì?
A. Một kỹ thuật tấn công bằng cách chèn mã SQL độc hại vào các truy vấn cơ sở dữ liệu.
B. Một phương pháp tối ưu hóa hiệu suất cơ sở dữ liệu.
C. Một công cụ để quản lý cơ sở dữ liệu.
D. Một giao thức để truyền dữ liệu an toàn.
109. Trong ngôn ngữ lập trình, ‘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 biến toàn cục.
D. Một cấu trúc dữ liệu tuyến tính.
110. Đâu là ưu điểm của việc sử dụng ngôn ngữ lập trình biên dịch so với ngôn ngữ thông dịch?
A. Dễ dàng gỡ lỗi hơn.
B. Hiệu suất thực thi thường cao hơn.
C. Khả năng tương thích với nhiều nền tảng hơn.
D. Yêu cầu ít bộ nhớ hơn.
111. Phương pháp kiểm thử phần mềm nào tập trung vào việc kiểm tra các thành phần riêng lẻ của hệ thống?
A. Kiểm thử tích hợp (Integration testing).
B. Kiểm thử đơn vị (Unit testing).
C. Kiểm thử hệ thống (System testing).
D. Kiểm thử chấp nhận (Acceptance testing).
112. Trong ngữ cảnh của bảo mật, ‘authentication’ và ‘authorization’ khác nhau như thế nào?
A. ‘Authentication’ xác định danh tính của người dùng, còn ‘authorization’ xác định quyền truy cập của người dùng.
B. ‘Authentication’ mã hóa dữ liệu, còn ‘authorization’ giải mã dữ liệu.
C. ‘Authentication’ kiểm tra tính toàn vẹn của dữ liệu, còn ‘authorization’ kiểm tra tính sẵn sàng của dữ liệu.
D. ‘Authentication’ ngăn chặn tấn công SQL injection, còn ‘authorization’ ngăn chặn tấn công XSS.
113. Công cụ nào sau đây thường được sử dụng để tự động hóa quá trình build, test và deploy ứng dụng?
A. IDE (Integrated Development Environment).
B. CI/CD (Continuous Integration/Continuous Deployment).
C. Version Control System (VCS).
D. Debugger.
114. Trong lập trình hàm, ‘pure function’ là gì?
A. Một hàm không có tác dụng phụ và luôn trả về cùng một kết quả cho cùng một đầu vào.
B. Một hàm chỉ chứa các phép toán số học.
C. Một hàm được định nghĩa bên trong một hàm khác.
D. Một hàm không trả về giá trị.
115. Đâu là một trong những lợi ích chính của việc sử dụng ‘dependency injection’?
A. Tăng cường tính bảo mật của ứng dụng.
B. Giảm sự phụ thuộc giữa các thành phần của ứng dụng, giúp dễ dàng kiểm thử và bảo trì.
C. Tăng tốc độ thực thi của chương trình.
D. Đơn giản hóa quá trình triển khai ứng dụng.
116. Trong ngữ cảnh của lập trình web, ‘Cross-Site Scripting’ (XSS) là gì?
A. Một loại tấn công bằng cách chèn mã độc hại vào website để thực thi trong trình duyệt của người dùng khác.
B. Một phương pháp để tối ưu hóa hiệu suất website.
C. Một công cụ để kiểm tra tính bảo mật của website.
D. Một giao thức để truyền dữ liệu an toàn giữa trình duyệt và máy chủ.
117. Trong ngôn ngữ lập trình, ‘closure’ là gì?
A. Một hàm không có tham số.
B. Một hàm có thể truy cập các biến trong phạm vi mà nó được định nghĩa, ngay cả khi phạm vi đó không còn tồn tại.
C. Một vòng lặp vô hạn.
D. Một cấu trúc dữ liệu dùng để lưu trữ các cặp key-value.
118. Trong thiết kế API, REST (Representational State Transfer) là gì?
A. Một kiểu kiến trúc phần mềm tuân theo các nguyên tắc như statelessness, sử dụng các phương thức HTTP và định dạng dữ liệu chuẩn.
B. Một giao thức để truyền dữ liệu thời gian thực.
C. Một ngôn ngữ truy vấn cơ sở dữ liệu.
D. Một công cụ để quản lý dự án phần mềm.
119. Trong ngữ cảnh của ngôn ngữ lập trình, ‘first-class citizen’ dùng để chỉ điều gì?
A. Một kiểu dữ liệu cơ bản mà mọi ngôn ngữ đều hỗ trợ.
B. Một hàm có thể được truyền như một tham số hoặc trả về từ một hàm khác.
C. Một biến toàn cục có thể truy cập từ mọi nơi trong chương trình.
D. Một đối tượng được tạo ra từ một lớp (class).
120. Kiểu dữ liệu ‘abstract’ trong lập trình hướng đối tượng có vai trò gì?
A. Định nghĩa một lớp mà không cần triển khai đầy đủ các phương thức, để các lớp con kế thừa và hoàn thiện.
B. Tạo ra một kiểu dữ liệu không thể thay đổi sau khi khởi tạo.
C. Ẩn thông tin chi tiết về cách dữ liệu được lưu trữ.
D. Cho phép lưu trữ nhiều kiểu dữ liệu khác nhau trong cùng một biến.
121. Race condition (điều kiện chạy đua) là gì?
A. Một cuộc thi lập trình.
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. Một lỗi xảy ra khi một chương trình chạy quá nhanh.
D. Một kỹ thuật để tối ưu hóa tốc độ thực thi của chương trình.
122. Tính bất biến (immutability) trong lập trình là gì?
A. Khả năng thay đổi giá trị của một biến sau khi nó đã được gán.
B. Việc không thể thay đổi giá trị của một đối tượng sau khi nó đã được tạo.
C. Khả năng tạo ra các đối tượng có kiểu dữ liệu khác nhau.
D. Việc không thể truy cập một biến từ bên ngoài phạm vi của nó.
123. Compiler (trình biên dịch) hoạt động như thế nào?
A. Thực thi mã nguồn từng dòng một.
B. Chuyển đổi toàn bộ mã nguồn thành mã máy hoặc mã trung gian trước khi thực thi.
C. Gỡ lỗi mã nguồn.
D. Quản lý bộ nhớ cho chương trình.
124. Deadlock (bế tắc) là gì trong lập trình đa luồng?
A. Một tình huống khi một chương trình bị treo do lỗi bộ nhớ.
B. Một tình huống khi hai hoặc nhiều luồng chờ đợi lẫn nhau để giải phóng tài nguyên, dẫn đến không luồng nào có thể tiếp tục.
C. Một lỗi xảy ra khi một luồng cố gắng truy cập một vùng bộ nhớ không hợp lệ.
D. Một tình huống khi một luồng chiếm quá nhiều tài nguyên CPU.
125. Tokenizing là gì trong quá trình phân tích cú pháp (parsing)?
A. Quá trình chuyển đổi mã nguồn thành mã máy.
B. Quá trình chia mã nguồn thành các đơn vị nhỏ hơn gọi là token.
C. Quá trình kiểm tra lỗi cú pháp trong mã nguồn.
D. Quá trình tối ưu hóa mã nguồn.
126. Kiểu dữ liệu nào thường được sử dụng để biểu diễn giá trị đúng hoặc sai trong ngôn ngữ lập trình?
A. Integer
B. Float
C. Boolean
D. String
127. Lợi ích chính của việc sử dụng hàm (function) trong lập trình là gì?
A. Giảm kích thước của chương trình biên dịch.
B. Tăng tốc độ thực thi của chương trình.
C. Tái sử dụng mã và cải thiện tính mô đun của chương trình.
D. Giảm thiểu việc sử dụng bộ nhớ.
128. Stack overflow là gì?
A. Một lỗi xảy ra khi bộ nhớ stack bị tràn do quá nhiều lệnh gọi hàm đệ quy.
B. Một lỗi xảy ra khi bộ nhớ heap bị tràn.
C. Một trang web hỏi đáp về lập trình.
D. Một lỗi xảy ra khi chương trình cố gắng truy cập một vùng bộ nhớ không hợp lệ.
129. Lợi ích của việc sử dụng hệ thống quản lý phiên bản (version control system) như Git là gì?
A. Tăng tốc độ thực thi của chương trình.
B. Giảm kích thước mã nguồn.
C. Cho phép theo dõi các thay đổi, cộng tác và quản lý các phiên bản khác nhau của mã nguồn.
D. Tự động sửa lỗi trong mã nguồn.
130. Big O notation được sử dụng để làm gì?
A. Để đo lường kích thước của mã nguồn.
B. Để mô tả hiệu suất (thời gian hoặc không gian) của một thuật toán khi kích thước đầu vào tăng lên.
C. Để đo lường mức độ phức tạp của một ngôn ngữ lập trình.
D. Để mô tả mức độ dễ đọc của mã nguồn.
131. Just-in-time (JIT) compilation là gì?
A. Một kỹ thuật biên dịch mã nguồn ngay sau khi nó được viết.
B. Một kỹ thuật biên dịch mã nguồn trong thời gian chạy, khi nó cần thiết.
C. Một kỹ thuật biên dịch mã nguồn trước khi phân phối.
D. Một kỹ thuật biên dịch mã nguồn thành ngôn ngữ tự nhiên.
132. Đâu là mục tiêu chính của việc sử dụng lập trình hướng đối tượng (Object-Oriented Programming – OOP)?
A. Tăng tốc độ thực thi chương trình.
B. Giảm kích thước mã nguồn.
C. Cải thiện khả năng tái sử dụng mã, tính mô đun và dễ bảo trì.
D. Tối ưu hóa việc sử dụng bộ nhớ.
133. Đâu là sự khác biệt chính giữa biên dịch (compilation) và thông dịch (interpretation) trong ngữ cảnh ngôn ngữ lập 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.
B. Biên dịch thực thi mã nguồn từng dòng, trong khi thông dịch tạo ra mã máy trực tiếp.
C. Biên dịch nhanh hơn thông dịch.
D. Thông dịch tạo ra file thực thi độc lập, biên dịch thì không.
134. Garbage collection (thu gom rác) là gì trong ngữ cảnh quản lý bộ nhớ?
A. Một kỹ thuật để nén dữ liệu trong bộ nhớ.
B. Một quá trình tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình.
C. Một phương pháp để phát hiện và sửa lỗi trong mã nguồn.
D. Một kỹ thuật để tăng tốc độ truy cập bộ nhớ.
135. Closure là gì trong ngữ cảnh của ngôn ngữ lập trình?
A. Một hàm không có tham số.
B. Một hàm có thể truy cập các biến từ phạm vi bên ngoài của nó, ngay cả sau khi phạm vi đó đã kết thúc.
C. Một hàm chỉ có thể được gọi một lần.
D. Một hàm được định nghĩa bên trong một lớp.
136. Trong ngữ cảnh ngôn ngữ lập trình, ‘scope’ (phạm vi) đề cập đến điều gì?
A. Kích thước của bộ nhớ được cấp phát cho một biến.
B. Vùng của chương trình nơi một biến có thể được truy cập.
C. Thời gian tồn tại của một biến trong bộ nhớ.
D. Số lượng tham số mà một hàm có thể nhận.
137. 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 từ khóa ‘abstract’.
B. Một kiểu dữ liệu chỉ có thể được sử dụng trong các hàm trừu tượng.
C. Một kiểu dữ liệu được định nghĩa bởi các thao tác và thuộc tính của nó, không phải bằng cách triển khai cụ thể.
D. Một kiểu dữ liệu không thể được thay đổi sau khi được tạo.
138. Đệ quy (recursion) là gì trong lập trình?
A. Một kỹ thuật lập trình sử dụng các biến toàn cục.
B. Một hàm gọi chính nó để giải quyết một vấn đề nhỏ hơn của cùng một loại.
C. Một vòng lặp vô hạn.
D. Một kỹ thuật tối ưu hóa mã bằng cách loại bỏ các hàm không cần thiết.
139. Interpreter (trình thông dịch) hoạt động như thế nào?
A. Chuyển đổi toàn bộ mã nguồn thành mã máy trước khi thực thi.
B. Thực thi mã nguồn từng dòng một.
C. Tối ưu hóa mã nguồn để chạy nhanh hơn.
D. Kiểm tra lỗi cú pháp trong mã nguồn.
140. Bộ nhớ heap (heap memory) thường được sử dụng để làm gì trong lập trình?
A. Lưu trữ các biến cục bộ của hàm.
B. Lưu trữ mã chương trình.
C. Lưu trữ các biến toàn cục.
D. Cấp phát bộ nhớ động cho các đối tượng và cấu trúc dữ liệu.
141. Ưu điểm của việc sử dụng ngôn ngữ lập trình bậc cao (high-level programming language) so với ngôn ngữ lập trình bậc thấp (low-level programming language) là gì?
A. Ngôn ngữ bậc cao cho phép kiểm soát phần cứng tốt hơn.
B. Ngôn ngữ bậc cao chạy nhanh hơn.
C. Ngôn ngữ bậc cao dễ đọc, dễ viết và dễ bảo trì hơn.
D. Ngôn ngữ bậc cao sử dụng ít bộ nhớ hơn.
142. Side effect (tác dụng phụ) của một hàm là gì?
A. Giá trị trả về của hàm.
B. Bất kỳ thay đổi nào mà hàm gây ra cho trạng thái bên ngoài của chương trình, ngoài việc trả về một giá trị.
C. Thời gian thực thi của hàm.
D. Số lượng tham số mà hàm nhận.
143. SOLID là gì trong thiết kế 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ế giúp tạo ra phần mềm dễ bảo trì, mở rộng và kiểm thử.
C. Một công cụ để tối ưu hóa hiệu suất của chương trình.
D. Một phương pháp để quản lý bộ nhớ.
144. Virtual machine (máy ảo) là gì?
A. Một máy tính vật lý được sử dụng để chạy các chương trình.
B. Một môi trường phần mềm giả lập một hệ thống máy tính, cho phép chạy các chương trình trên các nền tảng khác nhau.
C. Một trình biên dịch mã nguồn.
D. Một hệ điều hành.
145. Abstract syntax tree (AST) là gì?
A. Một cấu trúc dữ liệu biểu diễn cấu trúc cú pháp của mã nguồn một cách trừu tượng.
B. Một cấu trúc dữ liệu biểu diễn mã máy.
C. Một cấu trúc dữ liệu biểu diễn bộ nhớ của chương trình.
D. Một cấu trúc dữ liệu biểu diễn các lỗi cú pháp trong mã nguồn.
146. Prototype-based programming (lập trình dựa trên nguyên mẫu) là gì?
A. Một phong cách lập trình chỉ sử dụng các hàm nguyên mẫu.
B. Một phong cách lập trình mà các đối tượng được tạo ra bằng cách sao chép và tùy chỉnh các đối tượng hiện có (nguyên mẫu).
C. Một phong cách lập trình chỉ sử dụng các kiểu dữ liệu nguyên thủy.
D. Một phong cách lập trình mà tất cả các đối tượng phải tuân theo một nguyên mẫu chung.
147. Static typing (kiểm tra kiểu tĩnh) là gì và nó khác gì so với dynamic typing (kiểm tra kiểu động)?
A. Static typing kiểm tra kiểu trong thời gian chạy, dynamic typing kiểm tra kiểu trong thời gian biên dịch.
B. Static typing kiểm tra kiểu trong thời gian biên dịch, dynamic typing kiểm tra kiểu trong thời gian chạy.
C. Static typing cho phép thay đổi kiểu dữ liệu của biến trong thời gian chạy, dynamic typing thì không.
D. Static typing không yêu cầu khai báo kiểu dữ liệu, dynamic typing thì có.
148. Đâu là mục tiêu chính của việc thiết kế ngôn ngữ lập trình?
A. Tối ưu hóa hiệu suất phần cứng cụ thể.
B. Đơn giản hóa việc biểu diễn và thực thi các thuật toán.
C. Tối đa hóa tính bảo mật của hệ điều hành.
D. Tạo ra một ngôn ngữ có thể đọc được bởi người không chuyên.
149. Concurrency (tính đồng thời) và parallelism (tính song song) khác nhau như thế nào?
A. Concurrency là thực hiện nhiều tác vụ cùng một lúc trên một bộ xử lý, parallelism là thực hiện nhiều tác vụ đồng thời trên nhiều bộ xử lý.
B. Concurrency là thực hiện nhiều tác vụ đồng thời trên nhiều bộ xử lý, parallelism là thực hiện nhiều tác vụ cùng một lúc trên một bộ xử lý.
C. Concurrency và parallelism là hai khái niệm giống nhau.
D. Concurrency chỉ áp dụng cho phần cứng, parallelism chỉ áp dụng cho phần mềm.
150. Nguyên tắc DRY (Don’t Repeat Yourself) trong lập trình có nghĩa là gì?
A. Luôn luôn ghi lại mã của bạn một cách chi tiết.
B. Tránh lặp lại mã bằng cách trừu tượng hóa các phần chung.
C. Sử dụng các biến có tên ngắn gọn để tiết kiệm không gian.
D. Chỉ viết mã khi bạn hoàn toàn chắc chắn về giải pháp.