1. Đâu là một thách thức chính khi áp dụng DevOps?
A. Thiếu công cụ tự động hóa.
B. Sự thay đổi về văn hóa và quy trình làm việc.
C. Chi phí đầu tư ban đầu quá thấp.
D. Dễ dàng tìm được nhân sự có kinh nghiệm.
2. Dependency Injection (DI) là gì và nó giúp ích gì trong phát triển phần mềm?
A. Một kỹ thuật để tăng tốc độ biên dịch code.
B. Một pattern thiết kế giúp giảm sự phụ thuộc giữa các component, tăng tính linh hoạt và khả năng kiểm thử.
C. Một phương pháp để tối ưu hóa hiệu năng database.
D. Một công cụ để tự động tạo tài liệu kỹ thuật.
3. Đâu là một mục tiêu quan trọng của việc lập kế hoạch kiểm thử (test planning)?
A. Viết code kiểm thử.
B. Xác định phạm vi, mục tiêu, nguồn lực và lịch trình cho hoạt động kiểm thử.
C. Triển khai phần mềm lên môi trường production.
D. Quản lý cấu hình phần mềm.
4. Đâu là mục tiêu chính của kiểm thử hồi quy (regression testing)?
A. Tìm kiếm các lỗi bảo mật.
B. Đảm bảo rằng các thay đổi mới không gây ra lỗi cho các chức năng đã hoạt động trước đó.
C. Kiểm tra hiệu năng của phần mềm.
D. Đảm bảo code được viết theo chuẩn coding convention.
5. Trong kiểm thử phần mềm, `Black box testing` là gì?
A. Kiểm thử dựa trên việc xem xét cấu trúc code bên trong.
B. Kiểm thử dựa trên đặc tả yêu cầu chức năng mà không cần biết cấu trúc bên trong.
C. Kiểm thử hiệu năng của phần mềm.
D. Kiểm thử khả năng bảo mật của phần mềm.
6. Đâu là một yếu tố quan trọng để xây dựng một API RESTful tốt?
A. Sử dụng tất cả các phương thức HTTP có thể.
B. Tuân thủ các nguyên tắc REST, sử dụng các phương thức HTTP một cách hợp lý và trả về các mã trạng thái phù hợp.
C. Sử dụng XML để định dạng dữ liệu.
D. Không cần tài liệu.
7. Khi nào nên sử dụng kiến trúc hướng sự kiện (Event-Driven Architecture)?
A. Khi cần xử lý các tác vụ đồng bộ.
B. Khi cần xây dựng các hệ thống phản ứng nhanh với các sự kiện và có tính mở rộng cao.
C. Khi cần tối ưu hóa hiệu năng database.
D. Khi cần xây dựng các ứng dụng desktop.
8. Đâu là mục tiêu chính của việc tái cấu trúc (refactoring) code?
A. Thêm chức năng mới vào phần mềm.
B. Thay đổi giao diện người dùng.
C. Cải thiện cấu trúc và khả năng đọc hiểu của code mà không thay đổi chức năng.
D. Tối ưu hóa hiệu năng của database.
9. Trong kiểm thử phần mềm, Unit Test là gì?
A. Kiểm thử toàn bộ hệ thống.
B. Kiểm thử các module riêng lẻ.
C. Kiểm thử một đơn vị code nhỏ nhất, ví dụ như một hàm hoặc một lớp.
D. Kiểm thử giao diện người dùng.
10. Đâu là một lợi ích của việc sử dụng kiến trúc serverless?
A. Giảm thiểu chi phí phần cứng.
B. Tự động mở rộng và quản lý tài nguyên, giúp giảm chi phí vận hành và tăng tính linh hoạt.
C. Tăng tốc độ biên dịch code.
D. Dễ dàng tìm được nhân sự có kinh nghiệm.
11. Nguyên tắc SOLID trong thiết kế hướng đối tượng nhằm mục đích gì?
A. Tăng độ phức tạp của code để khó bị sao chép.
B. Giảm thiểu số lượng class và object trong hệ thống.
C. Tạo ra các thiết kế dễ bảo trì, mở rộng và tái sử dụng.
D. Tối ưu hóa hiệu năng bằng cách viết code càng ngắn gọn càng tốt.
12. Vai trò của Scrum Master là gì?
A. Quản lý dự án và phân công công việc.
B. Đảm bảo nhóm Scrum tuân thủ các nguyên tắc và thực hành của Scrum.
C. Viết code và kiểm thử phần mềm.
D. Xác định yêu cầu của khách hàng.
13. Chức năng của lớp trừu tượng (Abstract Class) trong lập trình hướng đối tượng là gì?
A. Để tạo ra các đối tượng không thể thay đổi.
B. Để định nghĩa một interface mà các lớp con phải triển khai.
C. Để tạo ra các lớp không thể kế thừa.
D. Để tối ưu hóa hiệu năng của chương trình.
14. Trong ngữ cảnh của Continuous Integration (CI), mục tiêu chính là gì?
A. Tự động hóa quá trình triển khai phần mềm lên môi trường production.
B. Tích hợp code từ các thành viên trong nhóm phát triển một cách thường xuyên và tự động.
C. Tối ưu hóa hiệu năng của database.
D. Viết tài liệu kỹ thuật cho dự án.
15. Phương pháp kiểm thử A/B thường được sử dụng để làm gì?
A. Kiểm tra hiệu năng của hệ thống.
B. So sánh hai phiên bản của một tính năng để xác định phiên bản nào hoạt động tốt hơn.
C. Tìm kiếm các lỗi bảo mật.
D. Đảm bảo code được viết theo chuẩn.
16. Đâu là một lợi ích của việc sử dụng Design Patterns?
A. Giảm thiểu số lượng code cần viết.
B. 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. Tăng tốc độ biên dịch code.
D. Tự động viết code cho lập trình viên.
17. Trong ngữ cảnh phát triển phần mềm, thuật ngữ `Technical Debt` (Nợ kỹ thuật) ám chỉ điều gì?
A. Số tiền nợ các nhà cung cấp phần mềm.
B. Hậu quả của việc đưa ra các quyết định thiết kế hoặc code không tối ưu trong ngắn hạn để đạt được mục tiêu nhanh chóng, nhưng gây ra khó khăn trong bảo trì và phát triển về sau.
C. Chi phí bảo trì phần mềm hàng năm.
D. Số lượng lỗi còn tồn đọng trong phần mềm.
18. Yếu tố nào sau đây quan trọng nhất trong việc xác định thành công của một dự án phần mềm?
A. Sử dụng công nghệ mới nhất.
B. Tuân thủ nghiêm ngặt theo kế hoạch ban đầu.
C. Đáp ứng nhu cầu của khách hàng và các bên liên quan.
D. Hoàn thành dự án trong thời gian ngắn nhất.
19. Trong lập trình hướng đối tượng, tính đa hình (Polymorphism) là gì?
A. Khả năng một đối tượng có nhiều thuộc tính.
B. Khả năng một đối tượng có thể có nhiều hành vi khác nhau tùy thuộc vào ngữ cảnh.
C. Khả năng một lớp có thể có nhiều lớp con.
D. Khả năng một hàm có thể được gọi với nhiều kiểu dữ liệu khác nhau.
20. Vai trò của Product Owner trong Scrum là gì?
A. Quản lý và điều phối các hoạt động của nhóm phát triển.
B. Đảm bảo chất lượng code.
C. Xác định và quản lý Product Backlog, đảm bảo giá trị sản phẩm.
D. Viết code và kiểm thử phần mềm.
21. Đâu là một lợi ích của việc sử dụng Continuous Delivery?
A. Giảm thiểu chi phí phát triển.
B. Tự động hóa quá trình phát hành phần mềm, giúp phát hành nhanh chóng và thường xuyên hơn.
C. Tăng tốc độ biên dịch code.
D. Tự động viết tài liệu kỹ thuật.
22. Decorator pattern là gì và nó được sử dụng để làm gì?
A. Một pattern để tạo ra các đối tượng phức tạp.
B. Một pattern thiết kế cho phép thêm các trách nhiệm vào một đối tượng một cách động.
C. Một pattern để quản lý các kết nối database.
D. Một pattern để tối ưu hóa hiệu năng.
23. Mục đích của việc sử dụng Docker trong phát triển phần mềm là gì?
A. Tăng tốc độ biên dịch code.
B. Đóng gói ứng dụng và các dependency của nó vào một container, giúp triển khai dễ dàng và nhất quán trên các môi trường khác nhau.
C. Tối ưu hóa hiệu năng database.
D. Tự động viết tài liệu kỹ thuật.
24. Kiến trúc Microservices có ưu điểm gì so với kiến trúc monolithic?
A. Dễ dàng triển khai và quản lý hơn.
B. Khả năng mở rộng và phục hồi tốt hơn.
C. Chi phí phát triển thấp hơn.
D. Ít phức tạp hơn trong quá trình phát triển.
25. Đâu là mục tiêu chính của việc sử dụng mô hình Agile trong phát triển phần mềm?
A. Giảm thiểu chi phí phát triển bằng mọi giá.
B. Tối đa hóa sự tuân thủ theo kế hoạch ban đầu.
C. Nâng cao khả năng thích ứng với thay đổi và cung cấp giá trị liên tục cho khách hàng.
D. Đảm bảo tài liệu được hoàn thành đầy đủ trước khi bắt đầu phát triển.
26. Đâ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 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à quản lý thay đổi dễ dàng.
C. Tự động viết code cho lập trình viên.
D. Bảo vệ code khỏi virus.
27. Trong bảo mật phần mềm, `SQL injection` là gì?
A. Một kỹ thuật mã hóa dữ liệu.
B. Một lỗ hổng bảo mật cho phép kẻ tấn công chèn mã SQL độc hại vào các truy vấn database.
C. Một phương pháp kiểm thử hiệu năng database.
D. Một loại virus lây lan qua các file SQL.
28. Trong mô hình Waterfall, giai đoạn nào sau giai đoạn `Thiết kế`?
A. Kiểm thử
B. Bảo trì
C. Triển khai
D. Hiện thực (Coding)
29. Đâu là một công cụ phổ biến để quản lý dự án theo phương pháp Agile?
A. Microsoft Project
B. Jira
C. Excel
D. Word
30. Đâu là một thách thức chính khi làm việc với các hệ thống lớn và phức tạp?
A. Tìm kiếm đủ số lượng lập trình viên.
B. Quản lý sự phức tạp và đảm bảo tính nhất quán.
C. Giảm thiểu chi phí phần cứng.
D. Tăng tốc độ biên dịch code.