1. Điều gì xảy ra khi bạn cố gắng truy cập một phần tử của list bằng index vượt quá phạm vi của list?
A. Trả về giá trị None
B. Trả về 0
C. Gây ra lỗi IndexError
D. Tự động mở rộng kích thước list
2. Phương thức `append()` và `extend()` khác nhau như thế nào khi sử dụng với list trong Python?
A. `append()` thêm một phần tử vào cuối list, `extend()` thêm nhiều phần tử từ một iterable vào cuối list.
B. `append()` thêm nhiều phần tử vào cuối list, `extend()` chỉ thêm một phần tử vào đầu list.
C. `append()` và `extend()` hoạt động giống nhau, chỉ khác tên gọi.
D. `append()` chỉ dùng cho số, `extend()` dùng cho chuỗi.
3. Exception handling trong Python được thực hiện bằng khối lệnh nào?
A. `if…else`
B. `for…in`
C. `try…except`
D. `while…else`
4. Metaclass trong Python là gì và khi nào nên sử dụng metaclass?
A. Một class đặc biệt để tạo instance của class.
B. Một class để tạo decorator.
C. Class của một class. Metaclass kiểm soát việc tạo class, cho phép tùy chỉnh quá trình tạo class. Nên dùng khi cần kiểm soát hoặc tùy biến sâu sắc quá trình tạo class, ví dụ như tự động đăng ký class, thay đổi hành vi của class.
D. Một class dùng để xử lý metadata (dữ liệu về dữ liệu).
5. Điểm khác biệt chính giữa `list comprehension` và vòng lặp `for` truyền thống khi tạo list trong Python là gì?
A. `list comprehension` nhanh hơn và ngắn gọn hơn so với vòng lặp `for` truyền thống trong nhiều trường hợp.
B. Vòng lặp `for` truyền thống nhanh hơn `list comprehension`.
C. `list comprehension` chỉ dùng được cho số, vòng lặp `for` dùng được cho mọi kiểu dữ liệu.
D. Không có sự khác biệt, chúng hoàn toàn tương đương.
6. Phương thức `__str__` và `__repr__` khác nhau như thế nào trong Python class?
A. `__str__` dùng cho mục đích debug, `__repr__` dùng để hiển thị thân thiện với người dùng.
B. `__str__` dùng để hiển thị thân thiện với người dùng, `__repr__` dùng cho mục đích debug và phát triển (developer-friendly representation).
C. `__str__` và `__repr__` hoạt động giống nhau.
D. `__str__` chỉ dùng cho chuỗi, `__repr__` dùng cho mọi kiểu dữ liệu.
7. Sự khác biệt giữa shallow copy và deep copy trong Python là gì?
A. Shallow copy nhanh hơn deep copy.
B. Shallow copy tạo bản sao độc lập hoàn toàn, deep copy tạo bản sao tham chiếu.
C. Shallow copy tạo bản sao tham chiếu, deep copy tạo bản sao độc lập hoàn toàn cho cả đối tượng và các đối tượng con.
D. Không có sự khác biệt, chúng là như nhau.
8. Generator trong Python là gì và lợi ích chính của việc sử dụng generator là gì?
A. Một loại biến đặc biệt.
B. Một hàm trả về một iterator, giúp tiết kiệm bộ nhớ khi làm việc với chuỗi dữ liệu lớn.
C. Một cách để tạo class trong Python.
D. Một công cụ debug code.
9. Lazy evaluation trong Python là gì và nó được thể hiện rõ nhất qua cấu trúc nào?
A. Một kỹ thuật tối ưu hóa bộ nhớ bằng cách xóa các biến không dùng nữa.
B. Một chiến lược đánh giá biểu thức mà trì hoãn việc tính toán cho đến khi giá trị của nó thực sự cần thiết. Thể hiện rõ nhất qua generator.
C. Một phương pháp để debug code chậm.
D. Một cách để tạo biến global.
10. Phương thức `super()` trong Python được sử dụng để làm gì trong lập trình hướng đối tượng?
A. Gọi một class khác.
B. Truy cập các thuộc tính của class hiện tại.
C. Gọi phương thức của class cha (parent class) từ class con (child class).
D. Tạo một class mới.
11. Trong Python, GIL (Global Interpreter Lock) là gì và nó ảnh hưởng đến hiệu suất đa luồng như thế nào?
A. Một loại lỗi phổ biến trong Python.
B. Một cơ chế cho phép Python chạy đa luồng thực sự trên nhiều core CPU.
C. Một khóa (lock) cho phép chỉ một luồng Python thực thi bytecode tại một thời điểm trong một tiến trình, giới hạn khả năng tận dụng đa core CPU cho các thread CPU-bound.
D. Một module để quản lý bộ nhớ.
12. Context manager trong Python (sử dụng `with` statement) dùng để làm gì?
A. Quản lý bộ nhớ.
B. Xử lý ngoại lệ.
C. Đảm bảo việc thiết lập và dọn dẹp tài nguyên (như file, kết nối database) được thực hiện đúng cách, ngay cả khi có lỗi xảy ra.
D. Tăng tốc độ code.
13. Trong Python, pickling và unpickling là gì?
A. Các phương pháp xử lý ảnh.
B. Các kỹ thuật mã hóa dữ liệu.
C. Quá trình tuần tự hóa (serialization) và giải tuần tự hóa (deserialization) đối tượng Python thành∕từ luồng byte.
D. Các thao tác với database.
14. Mục đích chính của việc sử dụng virtual environment (môi trường ảo) trong Python là gì?
A. Tăng tốc độ thực thi code Python.
B. Để chạy Python trên máy ảo.
C. Tạo môi trường cách ly cho các dự án Python, giúp quản lý dependencies (thư viện phụ thuộc) riêng biệt cho từng dự án.
D. Để debug code Python dễ dàng hơn.
15. Unit testing trong Python là gì và tại sao nó quan trọng?
A. Một công cụ để tối ưu hóa hiệu suất code.
B. Một phương pháp để viết comment trong code.
C. Quá trình kiểm thử từng đơn vị (unit) code nhỏ nhất (như hàm, class) để đảm bảo chúng hoạt động đúng như mong đợi. Quan trọng vì giúp phát hiện lỗi sớm, cải thiện chất lượng và độ tin cậy của phần mềm.
D. Một loại decorator.
16. Decorator trong Python là gì và nó thường được sử dụng để làm gì?
A. Một loại vòng lặp đặc biệt.
B. Một cách để ghi chú code.
C. Một hàm dùng để sửa đổi hoặc mở rộng chức năng của hàm khác.
D. Một kiểu dữ liệu mới trong Python.
17. Module `os` trong Python thường được sử dụng để làm gì?
A. Tính toán số học.
B. Xử lý chuỗi.
C. Tương tác với hệ điều hành, như thao tác file và thư mục.
D. Xử lý dữ liệu JSON.
18. Trong Python, vòng lặp `for…else` hoạt động như thế nào?
A. Khối `else` luôn được thực thi sau khi vòng lặp `for` kết thúc.
B. Khối `else` chỉ thực thi nếu vòng lặp `for` bị dừng bởi lệnh `break`.
C. Khối `else` chỉ thực thi nếu vòng lặp `for` hoàn thành mà không gặp lệnh `break`.
D. Khối `else` thực thi trước vòng lặp `for`.
19. Trong Python, kiểu dữ liệu nào sau đây là kiểu bất biến (immutable)?
A. list
B. tuple
C. set
D. dictionary
20. Descriptor trong Python là gì và nó được sử dụng để làm gì?
A. Một loại decorator đặc biệt.
B. Một cách để tạo docstring cho class.
C. Một giao thức cho phép tùy chỉnh hành vi khi thuộc tính của object được truy cập, sửa đổi hoặc xóa. Dùng để thực hiện logic phức tạp khi thao tác với thuộc tính, ví dụ như validation, lazy loading, computed attributes.
D. Một công cụ để quản lý namespace.
21. Trong Python, `staticmethod` và `classmethod` khác nhau như thế nào?
A. `staticmethod` nhận instance của class làm đối số đầu tiên, `classmethod` nhận class làm đối số đầu tiên.
B. `staticmethod` không nhận instance hay class làm đối số đầu tiên, `classmethod` nhận class làm đối số đầu tiên.
C. `staticmethod` có thể truy cập các thuộc tính của class, `classmethod` thì không.
D. `staticmethod` và `classmethod` hoạt động giống nhau, chỉ khác tên gọi.
22. `*args` và `**kwargs` trong định nghĩa hàm Python dùng để làm gì?
A. Khai báo kiểu dữ liệu cho tham số.
B. Chỉ định giá trị mặc định cho tham số.
C. Cho phép truyền vào một số lượng tùy ý tham số vị trí (`*args`) và tham số từ khóa (`**kwargs`).
D. Bắt buộc phải truyền tham số có tên `args` và `kwargs`.
23. Asyncio trong Python được sử dụng để làm gì?
A. Tạo giao diện người dùng đồ họa (GUI).
B. Xử lý đa tiến trình (multiprocessing).
C. Viết code đồng thời (concurrent code) sử dụng coroutine, đặc biệt hữu ích cho I∕O-bound operations.
D. Tính toán số học phức tạp.
24. Hàm `lambda` trong Python được sử dụng để làm gì?
A. Định nghĩa một hàm có tên.
B. Định nghĩa một hàm vô danh (anonymous function) nhỏ.
C. Gọi một hàm khác.
D. Nhập dữ liệu từ người dùng.
25. MRO (Method Resolution Order) trong Python là gì và nó quan trọng như thế nào trong multiple inheritance (đa kế thừa)?
A. Thứ tự các phương thức được định nghĩa trong một class.
B. Thứ tự các class cha được liệt kê trong định nghĩa class con.
C. Thứ tự Python tìm kiếm phương thức trong hệ thống kế thừa khi một phương thức được gọi trên một instance của class con. Quan trọng trong đa kế thừa để giải quyết xung đột tên phương thức và đảm bảo tính nhất quán của kế thừa.
D. Thứ tự các thuộc tính được kế thừa.
26. Trong Python, iterator và iterable khác nhau như thế nào?
A. Iterable là đối tượng có thể lặp qua các phần tử của nó, iterator là đối tượng thực hiện việc lặp qua các phần tử đó.
B. Iterable và iterator là giống nhau.
C. Iterator là một loại iterable đặc biệt.
D. Iterable là một hàm, iterator là một class.
27. Decorator `@property` trong Python được sử dụng để làm gì?
A. Tạo một thuộc tính chỉ đọc (read-only property) cho class.
B. Định nghĩa một phương thức tĩnh.
C. Tạo một class con.
D. Tạo một thuộc tính có thể ghi (writable property).
28. Phương thức `__init__` trong class Python có vai trò gì?
A. Định nghĩa phương thức hủy đối tượng.
B. Khởi tạo class.
C. Định nghĩa phương thức tĩnh.
D. Khởi tạo đối tượng (instance) của class.
29. Trong Python, namespace là gì?
A. Một kiểu dữ liệu đặc biệt.
B. Một vùng chứa tên (names) để tránh xung đột tên giữa các biến và hàm.
C. Một cách để tạo comment trong code.
D. Một loại decorator.
30. Garbage collection trong Python là gì và nó hoạt động như thế nào?
A. Một công cụ để debug code.
B. Một cơ chế quản lý bộ nhớ tự động, tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình. Python sử dụng reference counting và cyclic garbage collector để phát hiện và giải phóng bộ nhớ.
C. Một kỹ thuật tối ưu hóa tốc độ thực thi code.
D. Một module để quản lý file.