Вопросы для подготовки к Python Developer интервью
Disclaimer
Ответы на вопросы собирал давно и с попеременным успехом. Где-то могут быть неточности, где-то откровенный бред (особенно в разделе про БД). Источники также выбирались не очень переборчиво. Часть ссылок на источники может быть не указана по причине забывчивости или просто случайно была утеряна. Владелец этого репозитория не несет ответственности за ущерб причиненный содержимым этого репозитория, работой Python-разработчика и работой как таковой.
Собственно вопросы
FAQ
Что это?
Список вопросов для подготовки к интервью. Могут быть полезны как интервьюеру так и интервьюируемому
Зачем?
Как-то увидел статью на Хабре где было много вопросов, но практически не было ответов и не смог пройти мимо.
Нашел ошибку/опечатку/бред в ответах или хочу добавить еще вопросов
Молодец, создавай PR.
- После того как что-то изменил в questions.md запусти
make toc
чтобы обновить Список вопросов - Не забудь добавить себя в metadata.txt в раздел
author
Не хочу читать в Markdown, хочу читать в электронной книге
Пожалуйста releases
Список вопросов
- Python
- Последовательности
- Что такое последовательность
- Какие операции поддерживают большинство последовательностей
- Какие виды строк бывают в питоне
- Можно ли изменить отдельный символ внутри строки
- Как соединить список строк в одну. Как разбить строку на список строк
- Как кодировать и декодировать строки
- Чем список отличается от кортежа
- Что такое диапазон
- Как сделать список уникальным (без повторяющихся элементов)
- Есть кортеж из трех элементов. Назначить переменным a, b, c его значения
- Как сравниваются последовательности
- Множества и отображения
- Как понять хешируемый ли объект
- Что такое множество
- Для чего применяются множества
- Какие операции можно производить над множествами
- Как происходит проверка множеств на равенство
- Что такое отображение
- Какие нюансы есть в использовании чисел как ключей
- Какие операции можно производить над отображениями
- Что возвращает метод items
- Как отсортировать список словарей по определенному полю
- Что может являться ключом словаря. Что не может. Почему
- Есть два списка – ключи и значения. Как составить из них словарь
- Как работает хэш-таблица
- Что такое коллизия
- Где будет быстрее поиск, а где перебор и почему: dict, list, set, tuple
- Функции
- Что такое args, kwargs. В каких случаях они требуются
- Почему использовать изменяемые объекты как параметры по-умолчанию плохо. Приведите пример плохого случая. Как исправить
- Можно ли передавать функцию в качестве аргумента другой функции
- Можно ли объявлять функцию внутри другой функции. Где она будет видна
- Что такое лямбды. Каковы их особенности
- Допустимы ли следующие выражения
- Как передаются значения аргументов в функцию или метод
- Что такое замыкание
- Итераторы и генераторы
- Что такое контейнер
- Что такое итерабельный объект
- Что такое итератор
- Что такое генератор
- Что такое генераторная функция
- Что делает yield
- В чем отличие [x for x in y] от (x for x in y)
- Что особенного в генераторе
- Как объявить генератор
- Как получить из генератора список
- Что такое подгенератор
- Какие методы есть у генераторов
- Можно ли извлечь элемент генератора по индексу
- Что возвращает итерация по словарю
- Как итерировать словарь по парам ключ-значение
- Что такое сопрограмма
- Классы, объекты
- Как получить список атрибутов объекта
- Что такое магические методы, для чего нужны
- Как в классе сослаться на родительский класс
- Возможно ли множественное наследование
- Что такое MRO
- Что такое Diamond problem
- Что такое миксины
- Что такое контекстный менеджер. Как написать свой
- Прокомментировать выражение
- Что такое __slots__. Плюсы, минусы
- В чем смысл параметров _value, __value
- Что такое __new__. И чем он отличается от __init__. В какой последовательности они выполняются
- Что такое и чем отличается old-style от new-style classes
- Что такое утиная типизация
- Модули, пакеты
- Исключения
- Что такое обработка исключений
- Для чего могут применять конструкцию try finally без except
- Как правильно по-разному обрабатывать исключения
- Что будет если ошибку не обработает блок except
- Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение
- Что такое сцепление исключений
- Зачем нужен блок else
- Что можно передать в конструктор исключения
- Какие есть классы исключений
- В каких случаях можно обработать SyntaxError
- Можно ли создавать собственные исключения
- Для чего нужны предупреждения (warnings) и как создать собственное
- Для чего нужен модуль warning
- Декораторы
- Метаклассы
- Ввод-Вывод
- Что такое файловый объект
- Какие есть виды файловых объектов
- В чем отличие текстовых и бинарных файлов
- Как пользоваться функцией open
- Для чего необходимо закрывать файлы
- Что делают методы tell и seek
- Что делают StringIO и BytesIO
- Являются ли файловые объекты контекстными менеджерами
- Что такое сериализация
- json.dumps / json.dump , json.loads / json.load
- Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json
- pickle.dumps / pickle.dump, pickle.loads / pickle.load
- Тестирование
- Пирамида тестирования
- Что такое mocking
- Что делать, если тестируемая функция использует удалённое подключение к внешним сервисам, которое иногда видает ошибку таймаута, 404 и им подобные
- Что делать, если тестируемая функция занимает много времени на выполнение повторяющихся операций внутри неё
- Какие вы знаете виды тестов
- Чем интеграционное тестирование отличается от функционального
- Функциональное программирование
- Что такое функциональное программирование
- Как у Python с поддержкой функционального программирования
- Что такое объект первого класса
- Что такое функция высшего порядка
- Что такое каррирование
- Опишите функции map, reduce, filter модуля functools
- Какие еще вы знаете функции из модуля functools
- Какие вы функции знаете из модуля itertools
- Для чего нужен модуль operator
- GIL, потоки, процессы
- Что такое GIL. Какие у него есть проблемы
- Работали ли Вы с asyncio. В чём его особенность
- Что такое async/await, для чего они нужны и как их использовать
- Как в питоне реализуется многопоточность. Какими модулями
- В чем отличие тредов от мультипроцессинга
- Какие задачи хорошо параллелятся, какие плохо
- Нужно посчитать 100 уравнений. Делать это в тредах или нет
- Треды в Питоне — это нативные треды или нет
- Что такое гринлеты. Общее понятие. Примеры реализаций
- Какие варианты реализации шаблона Singleton на питоне
- Какие вы знаете инструменты для проверки кодстайл
- Что такое list/dict comprehension
- Какая разница между одинарным и двойным подчеркиванием
- Отличие copy() от deepcopy()
- Что такое garbage collector. В чём его плюсы и минусы
- Что такое интроспекция
- Что такое рефлексия
- Последовательности
- Django
- Что такое Middleware, для чего, как реализуется
- Назовите основные мидлвари. Зачем они нужны
- Опишите алгоритм работы CSRF middleware
- Что такое сигналы? Зачем нужны? Назовите основные
- Как реализуется связь m2m на уровне базы данных
- Чем лучше отправлять форму — GET или POST
- Как работает Serializer в Django REST Framework
- Что такое Meta в классах Django и для чего нужен
- За что отвечает Meta в сериализаторе
- Какая разница в быстродействии между django и Flask (и почему)
- Как в django работает система аутентификации
- Веб-разработка
- HTTP
- Общее
- ООП
- Какие принципы программирования вы знаете
- Что такое code cohesion & code coupling
- Какие шаблоны проектирования вы знаете
- Порождающие (Creational)
- Структурные (Structural)
- Поведенческие (Behavioral)
- Цепочка ответственности (Chain of responsobility)
- Команда (Command)
- Интерпретатор (Interpreter)
- Итератор (Iterator)
- Посредник (Mediator)
- Хранитель (Memento)
- Наблюдатель (Observer)
- Состояние (State)
- Стратегия (Strategy)
- Шаблонный метод (Template method)
- Посетитель (Visitor)
- Поведенческие паттерны. Итог
- Что такое lru cache
- Что такое MQ
- Какие готовые реализации MQ вы знаете
- Что такое RPC
- Что такое gPRC
- Алгоритмы, структуры
- Что такое рекурсия. Какие минусы, плюсы
- Что такое хвостовая рекурсия
- Как можно оптимизировать хвостовую рекурсию в Python
- О-большое при оценке сложности
- Простой поиск
- Бинарный поиск
- Рекурсивные алгоритмы
- Быстрая сортировка
- Граф
- Очередь и стек
- Дерево
- Поиск в ширину
- Алгоритм Дейкстры
- Жадные алгоритмы
- Как распознать NP-полную задачу
- Динамическое программирование
- Алгоритм k ближайших соседей
- Алгоритм Ричарда Фейнмана
- Frontend
- SDLC
- VCS
- БД
- Что такое транзакция. Какие у неё есть свойства
- Какие команды управления транзакциями вы знаете
- Что такое уровни изолированности транзакций. Какие они бывают
- Что такое вложенные транзакции
- Что такое курсор и зачем он нужен
- Какая разница между PostgreSQL и MySQL
- Что такое VACUUM в PostgreSQL
- Что такое EXPLAIN. Какая разница между ним и EXPLAIN ANALYZE
- Какие виды Join'ов вы знаете, чем они отличаются друг от друга
- Дизайн-интервью
- Вопросы работодателю
- Интересные ссылки
- Источники вопросов