Типы данных

  • Какие типы данных есть в Python?
  • Как задаём типы данных в Python?
  • Какие типы являются изменяемыми (list, dict, set) и какие — неизменяемыми (числа, строки, tuple и др.)? В чём их различие? (ссылочная модель данных, присваивание, copy vs deepcopy)
  • В чём разница между list и tuple?
  • Какова скорость поиска в списке, множестве и словаре? (O(n) vs O(1))
  • Как работает словарь (хеш-таблица)? Что такое хеш-функция и коллизии? Как с ними бороться?
  • Что может быть ключом словаря?
  • Может ли кортеж или экземпляр класса быть ключом словаря?
  • Как устроен list? Какова сложность append и __getitem__?
  • Какие методы есть у кортежа и какова их сложность?
  • Как устроен set? Какова сложность union и intersection?
  • Какой метод должен реализовать кастомный класс, чтобы стать ключом словаря или элементом множества?
  • Что будет, если добавить в множество одно и то же значение несколько раз?

Операторы и конструкции

  • Какие условные операторы вы знаете? (if, else, elif, тернарный оператор)
  • Какие циклы существуют? (for, while)
  • Для чего служат конструкции try, except, else, finally?
  • В чём разница между == и is?
  • Как заставить функцию выбросить исключение, а не просто вывести сообщение об ошибке?

Декораторы и контекстные менеджеры

  • Что такое декоратор? Для чего он нужен?
  • Какие виды декораторов вы знаете? (@classmethod, @staticmethod, @property и др.)
  • Как устроен декоратор внутри? Что он принимает на вход и что возвращает?
  • Реализуйте простой декоратор.
  • Что такое менеджер контекста? Зачем он нужен?
  • Как работают методы __enter__ и __exit__?
  • Реализуйте простой контекстный менеджер.
  • Как написать контекстный менеджер через генератор? Какой декоратор используется и какую роль играет yield?
  • Как сделать асинхронный контекстный менеджер? Какие методы нужны вместо __enter__ / __exit__?
  • Что произойдёт с именем и сигнатурой функции после декорирования? Как сохранить метаданные оригинальной функции?
  • Как параметризовать декоратор (например, retry с числом попыток и задержкой)? Почему «просто добавить аргументов» не сработает?

Функции и методы

  • В чём отличие функции от метода?
  • Что такое lambda-функция? Чем она отличается от обычной функции и когда создаётся?
  • Что такое магические методы? Почему они нужны и какие вы знаете? (например, __str__, __repr__)
  • Что такое итератор? Как создать класс-итератор? (методы __iter__ и __next__)
  • Что такое генератор? Чем он отличается от итератора? (функция с yield vs класс)
  • Верно ли, что любой генератор является итератором?
  • Реализуйте итератор, который возводит значения в квадрат.
  • Реализуйте итератор для чисел Фибоначчи.

Классы и ООП

  • Что такое ООП и его основные принципы?
  • Что такое класс? Как объявить и использовать?
  • Что такое super? Когда и зачем его применять?
  • В чём разница между @classmethod и @staticmethod?
  • Что такое @dataclass? Зачем нужен?
  • Как проверить, есть ли у объекта атрибут? (getattr, setattr, delattr)
  • Чем отличаются методы __str__ и __repr__?
  • Что такое инкапсуляция, сокрытие методов и property?
  • Что такое __slots__ и декораторы?

Асинхронность и многопоточность

  • Как работает асинхронность в Python? Что такое корутина?
  • Что такое event loop и оператор await?
  • Для каких задач эффективна асинхронность?
  • Что такое GIL и почему Python называют однопоточным?
  • Чем отличается многопоточность от мультипроцессинга?
  • В чём различие между потоком и процессом?
  • Какие проблемы возникают при многопоточности?
  • Как организовать обмен данными между процессами?
  • Что такое ссылочная модель в Python?
  • В чём разница между copy и deepcopy?
  • Как выбирать между корутинами, AsyncIO и multiprocessing?
  • Какие виды многозадачности существуют в Python?
  • Как можно обойти или отключить GIL (несколько интерпретаторов, флаги интерпретатора, C-расширения, free-threaded сборки)?
  • Если GIL отключён и потоки работают с общей памятью, какие примитивы синхронизации нужны?

Работа с памятью

  • Как работает память в Python и сборщик мусора?
  • Когда и как объекты удаляются сборщиком мусора?
  • Как происходит управление памятью при использовании multiprocessing?

Продвинутое использование Python

  • Как организовать передачу информации между двумя приложениями на Python?
  • Как скачать и обработать датасет изображений через API сервиса?
  • Что такое Type Hints и как они используются?

Алгоритмы и задачи

  • Напишите функцию для умножения матрицы на вектор.
  • Объедините два отсортированных списка в один без использования внешних библиотек.
  • Напишите функцию для проверки, является ли массив арифметической прогрессией (массив не отсортирован).
  • Как отсортировать файл размером 100 GB при ограничении RAM 120 GB?
  • Как найти медиану, если в SQL или Python нет встроенной функции для этого?
  • Реализуйте функцию подсчёта recall для двух NumPy-массивов.
  • Что нужно, чтобы отсортировать список элементов в Python? Какова сложность встроенной сортировки?
  • Напишите функцию, определяющую максимальную высоту, достигнутую велосипедом (задача с высотой).
  • Найдите максимальную длину монотонного подмассива и верните его индексы.
  • В чём разница между графом и деревом?
  • Реализуйте RLE-сжатие строки. При недопустимых символах функция должна завершаться с ошибкой.
  • Напишите алгоритм поиска дубликатов в списке, включая изменяемые объекты.
  • Дана строка S и символ C. Верните для каждого символа расстояние до ближайшего C.
  • Дано множество точек. Определите, существует ли вертикальная ось симметрии. Как вычислить центр симметрии без проблем с точностью float?

Тестирование

  • Как работают фикстуры и параметризация в pytest?

Веб-фреймворки

  • Чем FastAPI отличается от Flask? Что для каких задач лучше подходит?
  • Что такое Depends в FastAPI и как работает инъекция зависимостей?