Вопросы:
— О последнем месте работы / интересных проектах и задачах
— Какие технологии использовали
— Как использовали Сelery
— Что отправляли в Kafka
— Уровни гарантии доставки в Kafka
Лайвкодинг — Задача 1 (оценка времени, места и сложности функции)
Замеряемое время ответа на сервере сильно отличается от итогового времени ответа на клиенте.
Выяснилось, что часто следующий запрос приходит когда еще не завершена обработка предыдущего
Хочется оценить уровень проблемы: надо подсчитать время, которое запросы находятся в очереди
В логах присутствует время отправки запроса в сервис и время получения ответа в секундах
Логи отсортированы по возрастанию время отправки запроса
Пример:
0 1 2 3 4 5 6 7 8 9 (секунды)
-------------------------------
- # # # # - - - - - Запрос 1
- - - # # # # - - - Запрос 2
- - - - - - # # # Запрос 3
-------------------------------
Диаграмма описывает следующий кейс:
[(1, 4), (3, 6), (7, 9)]
"""
def balancererrorrate(logs: list[tuple[int, int]]) -> int:
mapofseconds = dict() # {0:0, 1:1, 2:1, 3:2, 4:2, 5:1, 6:1, 7:1, 8:1, 9:1}
max_second = 0 # 6
for log in logs: # n
start, end = log
if end > max_second:
for i in range(max_second, end+1):
if mapofseconds.get(max_second):
continue
else:
mapofseconds[i] = 0
maxmaxsecond=end
for second in range(start, end+1): #
mapofseconds[second]+=1
return len([second for second in mapofseconds.values() if second > 1])
balancererrorrate([(1, 5), (4, 7)]) # 2
balancererrorrate([(2, 7), (5, 10)]) # 3
balancererrorrate([(2, 7), (9, 10)]) # 0
balancererrorrate([(2, 7), (9, 13), (10, 15)]) # 4
— Как проблема из предыдущей задачи решается на современных питоновских фреймворках
Лайвкодинг — Задача 2 (написать пайплайн обработки коллекции фильмов)
"""
Написать пайплайн обработки коллекции фильмов
Пайплайн должен состоять из следующих шагов:
- отсортировать коллекцию по скору фильмов
- убрать из коллекции фильмы, которые находятся в черном списке
"""
from dataclasses import dataclass
BLACK_LIST = ['Pirates of the Caribbean', 'Avengers']
@dataclass
class Film:
title: str
score: float
@dataclass
class FilmCollection:
items: list[Film]
class FilmCollectionStep(abc.ABC):
@abstractmethod
def process(collection: FilmCollection) -> FilmCollection:
raise NotImplementedError
class BlackListFilter(FilmCollectionStep):
...
class ScoreFilmSorter(FilmCollectionStep):
...
class BlackListFilter(FilmCollectionStep):
...
class Pipeline:
def init(self, steps: t.List[FilmCollectionStep]):
self.steps = steps
def run(self, collection: FilmCollection) -> FilmCollection:
[step.process(collection) for step in self.steps]
return collection
Какие принципы солид ты тут учел ?