Назад к материалам

Видео + статья / Собеседования

Собеседование Python Backend в МТС: коллекции и паттерны

Разбираем реальное Python Backend-собеседование в МТС: последовательности, args и kwargs, set и dict, генераторы, метаклассы и отказ сервиса.

Компания
МТС
Опубликовано
Обновлено
Видео вышло
Видео
11:46
Текст
4 минуты

Если ролик не загружается, выберите другую площадку.

Смотреть на

На собеседовании Python Backend-разработчика в МТС начали с коллекций и аргументов функций, затем перешли к устройству set и dict, итераторам, ООП и архитектурной задаче. Такой порядок быстро показывает, понимает ли кандидат язык под синтаксисом и умеет ли применять знания в работающем сервисе.

Чем список отличается от кортежа и строки

list, tuple и str — последовательности, но ведут себя по-разному. Список изменяем: можно заменить элемент, добавить или удалить значение. Кортеж и строка неизменяемы: операция создаёт новый объект, а не меняет существующий.

Кортеж удобно использовать для фиксированной записи или хэшируемого составного ключа, если все его элементы тоже хэшируемы. Список подходит для набора, который меняется. Формулировка «кортеж всегда быстрее» слишком общая: выбор структуры определяет смысл данных, а не небольшой выигрыш в конкретной операции. Основные операции последовательностей описаны в документации Python.

Что такое *args и **kwargs

*args собирает дополнительные позиционные аргументы в кортеж, а **kwargs — именованные в словарь. Названия args и kwargs приняты по соглашению; специальный смысл имеют звёздочки.

Пример кодаPython
def build_event(event_name: str, *tags: str, **fields: object) -> dict:
    # tags приходит кортежем, а fields — словарём именованных полей.
    return {
        "event": event_name,
        "tags": list(tags),
        "fields": fields,
    }


event = build_event("purchase", "mobile", price=990, currency="RUB")
print(event)

Сильный ответ дополняют распаковкой: func(*values, **options). При объявлении функции порядок параметров важен; полные правила приведены в разделе Function definitions.

Как убрать дубли и сохранить порядок

list(set(values)) удаляет повторы коротко, но предъявляет два условия: все элементы должны быть хэшируемыми, а исходный порядок не следует считать частью общего контракта set. Если порядок первого появления важен, используем ключи словаря:

Пример кодаPython
def unique_in_order(values: list[str]) -> list[str]:
    # dict сохраняет порядок добавления ключей и отбрасывает повторные ключи.
    return list(dict.fromkeys(values))


technologies = ["Python", "Django", "Python", "PostgreSQL"]
print(unique_in_order(technologies))
# ['Python', 'Django', 'PostgreSQL']

Для списков внутри списка этот способ тоже не сработает: вложенные списки нехэшируемы. Тогда нужен собственный ключ, преобразование в кортеж либо линейная проверка с понятной ценой.

Как устроены set, dict, итератор и генератор

dict хранит пары ключ—значение, а set — только уникальные элементы. Обе структуры используют хэширование, поэтому поиск в среднем занимает O(1), но качество хэша и коллизии влияют на реальную работу. Требования к __hash__ и __eq__ закреплены в модели данных Python.

Итерируемый объект умеет вернуть итератор через __iter__(). Итератор выдаёт элементы методом __next__(). Генератор создаёт итератор проще: функция с yield приостанавливает выполнение и сохраняет локальное состояние. Это удобно для больших потоков данных, но генератор обычно обходят один раз.

Как отвечать про ООП, метаклассы и паттерны

Python поддерживает объектно-ориентированный, процедурный и функциональный стили. Метакласс создаёт и настраивает классы так же, как класс создаёт экземпляры; по умолчанию эту роль выполняет type. Для обычной бизнес-логики метакласс нужен редко, поэтому лучше привести реальный сценарий — регистрацию классов или проверку их определения — и не выдавать его за повседневный инструмент.

Паттерн проектирования раскрывают по формуле «проблема → решение → цена». Например, Strategy позволяет менять алгоритм за единым интерфейсом, но добавляет объекты и связи. Декоратор-функция принимает вызываемый объект и возвращает замену с дополнительным поведением; он не требует изменения исходной функции.

Что делать при замедлении внешнего сервиса

Сначала нужно подтвердить проблему метриками: выросло ли время ответа, какой процент запросов затронут и где начинается задержка. Затем ограничить последствия:

  1. Поставить разумный тайм-аут.
  2. Делать ограниченные повторы с задержкой только для безопасных операций.
  3. Использовать кэш или запасной ответ, если данные допускают устаревание.
  4. Открывать Circuit Breaker после серии сбоев, чтобы не перегружать зависимость.
  5. Показать пользователю честное состояние и наблюдать восстановление.

Circuit Breaker временно блокирует обращения к неработающей зависимости и позже проверяет, восстановилась ли она. Это не просто кэш: паттерн управляет состоянием вызовов и защищает систему от каскадного отказа.

Итог: получил бы кандидат оффер

Фактический результат встречи не опубликован. Кандидат скорее прошёл бы технический этап: уверенно отвечал по коллекциям, хэш-таблицам, аргументам и паттернам, а в ситуационной задаче предложил диагностику и кэширование. Для окончательного Middle-решения мы бы проверили код, работу с БД, конкурентность и способность довести архитектурный ответ до конкретных тайм-аутов, метрик и компромиссов.

Источники

частые вопросы

Короткие ответы

Какие коллекции Python чаще проверяют на Backend-собеседовании?

List, tuple, dict и set: их изменяемость, хэшируемость, порядок, среднюю сложность операций и подходящие сценарии использования.

Нужно ли учить все паттерны проектирования?

Нет. Лучше глубоко знать несколько применявшихся паттернов и объяснять задачу, реализацию, пользу и цену каждого решения.

Что делать, если не помните точный термин?

Опишите механизм и ограничения своими словами, задайте уточняющий вопрос и не придумывайте определение. Рабочее рассуждение полезнее уверенной ошибки.

следующий шаг

Подготовьтесь к Python Backend-собеседованию

Тренажёр ЮНИКОД помогает повторить Python по темам, проверить ответы и отработать уточняющие вопросы до встречи с работодателем.

Перейти в тренажёр →