tgoop.com/python_job_interview/1172
Create:
Last Update:
Last Update:
🐍 Задача: Реализация декоратора `@smart_cache` с интеллектуальным кэшированием
📌 Описание
Реализуйте декоратор @smart_cache
, который кэширует результаты функции с учетом следующих требований:
1. Интеллектуальная очистка кэша — автоматически удаляет старые записи при превышении лимита
2. Поддержка разных стратегий вытеснения — LRU, LFU, FIFO
3. Таймаут кэша — автоматическое удаление записей по времени
4. Метрики использования — сбор статистики по попаданиям/промахам
5. Потокобезопасность — корректная работа в многопоточной среде
6. Поддержка методов классов — корректная работа с self
и cls
🧩 Пример использования
import time
from threading import Thread
@smart_cache(maxsize=100, strategy='LRU', ttl=300, collect_stats=True)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
class MathUtils:
@smart_cache(maxsize=50, strategy='LFU', ttl=600)
def expensive_calc(self, x, y):
time.sleep(0.1) # Имитация тяжелых вычислений
return x ** y + y ** x
# Использование
print(fibonacci(10)) # Вычисление
print(fibonacci(10)) # Из кэша
# Получение статистики
stats = fibonacci.cache_stats()
print(f"Cache hits: {stats['hits']}, misses: {stats['misses']}")
# Принудительная очистка
fibonacci.cache_clear()
# Многопоточное использование
def worker():
for i in range(5):
fibonacci(i)
threads = [Thread(target=worker) for _ in range(3)]
for t in threads:
t.start()
for t in threads:
t.join()
🛠 Требования к реализации
- Используйте только стандартную библиотеку Python
- Поддержка Python 3.7+
- Все стратегии вытеснения должны быть реализованы (LRU, LFU, FIFO)
- TTL должен работать как для отдельных записей, так и глобально
- Статистика должна включать: hits, misses, evictions, current_size
- Декоратор должен корректно работать с kwargs, *args
- Потокобезопасность через threading.Lock или аналоги
🧪 Бонусное задание
Реализуйте методы:
- cache_info() — подробная информация о текущем состоянии кэша
- cache_warmup(**kwargs) — предварительное заполнение кэша
- cache_persist(filename) — сохранение кэша в файл
- cache_load(filename) — загрузка кэша из файла
@python_job_interview
BY Python вопросы с собеседований
Share with your friend now:
tgoop.com/python_job_interview/1172