python-083Đọc toàn bộ đề miễn phí

Bộ nhớ đệm tự dọn dẹp bằng Weak Reference tránh rò rỉ bộ nhớ

Viết lớp WeakObjectCache:

PythonTrung bình25 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

weakrefmemory managementcachinggc

Kiến thức tiên quyết: references, garbage collection.

Nội dung đề bài

Mục tiêu kiến thức

  • Phân biệt giữa tham chiếu mạnh (Strong Reference) và tham chiếu yếu (Weak Reference).
  • Sử dụng mô-đun chuẩn weakref (weakref.WeakValueDictionary) để xây dựng bộ nhớ đệm an toàn bộ nhớ.
  • Tránh hiện tượng rò rỉ bộ nhớ (Memory Leak) khi lưu các đối tượng lớn trong cache toàn cục.

Mô tả bài toán

Viết lớp WeakObjectCache:

  • __init__(self): Khởi tạo cache sử dụng cấu trúc tham chiếu yếu cho các giá trị (weakref.WeakValueDictionary).
  • put(self, key: str, obj: object) -> None:
  • Lưu obj vào cache với khóa key.
  • Nếu obj không hỗ trợ tham chiếu yếu (ví dụ các kiểu dữ liệu nguyên thủy như int, str), raise TypeError("Doi tuong khong ho tro weakref").
  • get(self, key: str) -> object | None:
  • Trả về đối tượng lưu trong cache nếu đối tượng còn sống; nếu đối tượng đã bị Garbage Collector thu hồi hoặc khóa không tồn tại, trả về None.
  • contains(self, key: str) -> bool:
  • Kiểm tra khóa có tồn tại và đối tượng còn sống hay không.
  • size(self) -> int:
  • Trả về số lượng đối tượng thực tế còn sống trong cache.
  • clear(self) -> None:
  • Xóa toàn bộ cache.

Input

  • Tham số đầu vào cho hàm WeakObjectCache.

Output

  • Giá trị trả về của hàm WeakObjectCache theo đúng yêu cầu.

Ràng buộc

  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.
  • Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

WeakObjectCache(operations=[{'op': 'cache_lifecycle_test', 'expected_retained': True, 'expected_after_del': False}])

Output

True

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

Ví dụ 2

Input

WeakObjectCache(operations=[{'op': 'primitive_type_rejection', 'val': 12345, 'raises': 'TypeError'}])

Output

True

Giải thích

Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.