Теоретический скрининг
- База python:
- Типы данных, структуры данных.
- Классы и объекты.
- Сложность вставок в словари и списки, краевые случаи (например, когда вставка в список != O(1) а O(n)).
- Модуль Collections и дополнительные структуры данных.
- ООП — база по ООП, интерфейсы и абстракции.
- Декораторы.
- Функции генераторы и итераторы.
- Паттерны проектирования.
- Data:
- Что такое DWH?
- Что такое Data Lake?
- Версионирование данных?
- Что в моем понятии датасет?
- КД.
Задача 1
-
Описание задачи: Есть сервис к которому обращаются пользователи, у каждого уникальный id. Нужно написать тротлер который возвращает True если пользователь обращался не более чем
max_requests_per_userраз за последниеnum_recent_requests_to_considerзапросов, иначе, если за последниеnum_recent_requests_to_considerбылоmax_requests_per_userили более обращений с этим же id необходимо вернуть False. Считаем что если мы отклонили запрос то мы не учитываем его при обработке. -
Предоставленный шаблон кода:
class Throttler: def __init__( self, max_requests_per_user: int, num_recent_requests_to_consider: int ) -> None: assert(max_requests_per_user >= 1) assert(num_recent_requests_to_consider >= max_requests_per_user) self.max_requests_per_user = max_requests_per_user self.num_recent_requests_to_consider = num_recent_requests_to_consider def throttle(self, user_id: int) -> bool: pass -
Примеры использования (asserts):
if __name__ == "__main__" : throttler = Throttler(max_requests_per_user = 1, num_recent_requests_to_consider = 3) assert( throttler.throttle(1)) assert(not throttler.throttle(1)) assert(not throttler.throttle(1)) assert( throttler.throttle(2)) assert(not throttler.throttle(1)) assert(not throttler.throttle(2)) assert( throttler.throttle(3)) assert( throttler.throttle(4)) assert( throttler.throttle(1)) assert(not throttler.throttle(3)) assert(not throttler.throttle(4)) assert(not throttler.throttle(1)) print("ok")