Тех собес на middle-senior Python Developer в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории Python Developer

Посмотреть видео в категории

(2025-03-13)

Вопросы:

— О последнем месте работы / интересных проектах и задачах
— Какие технологии использовали
— Как использовали С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

Какие принципы солид ты тут учел ?