python_interview_questions
python_interview_questions copied to clipboard
Вопросы для подготовки к интервью на позицию Python Developer
Вопросы для подготовки к Python Developer интервью
Disclaimer
Ответы на вопросы собирал давно и с попеременным успехом. Где-то могут быть неточности, где-то откровенный бред (особенно в разделе про БД). Источники также выбирались не очень переборчиво. Часть ссылок на источники может быть не указана по причине забывчивости или просто случайно была утеряна. Владелец этого репозитория не несет ответственности за ущерб причиненный содержимым этого репозитория, работой Python-разработчика и работой как таковой.
Собственно вопросы
questions.md
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
- Что такое утиная типизация
-
Модули, пакеты
- Что такое модуль
- Как можно получить имя модуля
- Что такое модульное программирование
- Как Python ищет модули при импорте
- Что такое пакет
- Что вы можете сказать о конструкции import package.item
-
Исключения
- Что такое обработка исключений
- Для чего могут применять конструкцию try finally без except
- Как правильно по-разному обрабатывать исключения
- Что будет если ошибку не обработает блок except
- Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение
- Что такое сцепление исключений
- Зачем нужен блок else
- Что можно передать в конструктор исключения
- Какие есть классы исключений
- В каких случаях можно обработать SyntaxError
- Можно ли создавать собственные исключения
- Для чего нужны предупреждения (warnings) и как создать собственное
- Для чего нужен модуль warning
-
Декораторы
- Что такое декораторы. Зачем нужны
- Что может быть декоратором. К чему может быть применен декоратор
- Что будет, если декоратор не возвращает ничего
- В чем отличие @foobar от @foobar()
- Что такое фабрика декораторов
- Зачем нужен wraps
-
Метаклассы
- Что такое метаклассы
- Что такое type. Как работает поиск метакласса при создании объекта
- Как работают метаклассы
- Зачем вообще использовать метаклассы
-
Ввод-Вывод
- Что такое файловый объект
- Какие есть виды файловых объектов
- В чем отличие текстовых и бинарных файлов
- Как пользоваться функцией open
- Для чего необходимо закрывать файлы
- Что делают методы tell и seek
- Что делают StringIO и BytesIO
- Являются ли файловые объекты контекстными менеджерами
- Что такое сериализация
- json.dumps / json.dump , json.loads / json.load
- Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json
- pickle.dumps / pickle.dump, pickle.loads / pickle.load
-
Тестирование
- Пирамида тестирования
- Что такое mocking
- Что делать, если тестируемая функция использует удалённое подключение к внешним сервисам, которое иногда видает ошибку таймаута, 404 и им подобные
- Что делать, если тестируемая функция занимает много времени на выполнение повторяющихся операций внутри неё
-
Какие вы знаете виды тестов
- Unit-тесты
- Интеграционные тесты (Integration tests)
- Функциональное тестирование
- Системный тест (System test, Service test)
- Проверка работоспособности (Smoke test, Sanity check)
- Регрессионное тестирование (Regression testing)
- Прочее
- Чем интеграционное тестирование отличается от функционального
-
Функциональное программирование
- Что такое функциональное программирование
- Как у 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 работает система аутентификации
-
Веб-разработка
- Что такое CGI. Плюсы, минусы
- Как защитить куки от воровства и от подделки
- Какая разница между аутентификацией и авторизацией
- Что такое XSS. Примеры. Как защитить приложение
-
REST & SOAP
- Что такое REST
- Что такое SOAP
- В чем разница между REST и SOAP веб сервисами
- Можем ли мы посылать SOAP сообщения с вложением
- Как бы вы решили какой из REST или SOAP веб сервисов использовать
- Какие способы для мониторинга веб-приложений в production вы использовали или знаете
-
HTTP
- Как устроен протокол HTTP
- Написать raw запрос главной Яндекса
- Как клиенту понять, удался запрос или нет
- Что нужно отправить браузеру, чтобы перенаправить на другую страницу
- Как управлять кешированием в HTTP
- Как кэшируются файлы на уровне протокола
- Что такое HTTP
- Чем отличаются HTTP и HTTPS
-
Общее
-
ООП
- Инкапсуляция
- Наследование
- Полиморфизм
- Абстракция
-
Какие принципы программирования вы знаете
- KISS
- DRY
- YAGNI
- SLAP
- SOLID принципы
- Что такое code cohesion & code coupling
-
Какие шаблоны проектирования вы знаете
-
Порождающие (Creational)
- Абстрактная фабрика (Abstract factory)
- Построитель (Builder)
- Фабричный метод (Factory method)
- Прототип (Prototype)
- Одиночка (Singleton)
- Порождающие паттерны. Итог
-
Структурные (Structural)
- Адаптер (Adapter)
- Мост (Bridge)
- Компоновщик (Composite)
- Декоратор (Decorator)
- Фасад (Facade)
- Приспособленец (Flyweight)
- Заместитель (Proxy)
- Структурные паттерны. Итог
-
Поведенческие (Behavioral)
- Цепочка ответственности (Chain of responsobility)
- Команда (Command)
- Интерпретатор (Interpreter)
- Итератор (Iterator)
- Посредник (Mediator)
- Хранитель (Memento)
- Наблюдатель (Observer)
- Состояние (State)
- Стратегия (Strategy)
- Шаблонный метод (Template method)
- Посетитель (Visitor)
- Поведенческие паттерны. Итог
-
Порождающие (Creational)
- Что такое lru cache
- Что такое MQ
- Какие готовые реализации MQ вы знаете
- Что такое RPC
- Что такое gPRC
-
ООП
-
Алгоритмы, структуры
- Что такое рекурсия. Какие минусы, плюсы
- Что такое хвостовая рекурсия
- Как можно оптимизировать хвостовую рекурсию в Python
- О-большое при оценке сложности
- Простой поиск
- Бинарный поиск
- Рекурсивные алгоритмы
- Быстрая сортировка
- Граф
- Очередь и стек
- Дерево
- Поиск в ширину
- Алгоритм Дейкстры
- Жадные алгоритмы
- Как распознать NP-полную задачу
- Динамическое программирование
- Алгоритм k ближайших соседей
- Алгоритм Ричарда Фейнмана
-
Frontend
- Что такое куки. Зачем они, как с ними работать и где они сохраняются
- Может ли сервер изменить (добавить, удалить) куки
- Что такое JWT (JSON Web Token)
-
SDLC
- Agile/Scrum
- Какая разница между CI и CD
- Какая разница между Scrum и Kanban
- Вопрос для тим-лидов: что Вы будете делать, если на проекте нет тестов и заказчик не хочет тратить на их разработку время и деньги
- Что такое Code Debt и как с ним быть
-
VCS
- Что такое Git Flow
- Что такое Git Rebase
- Что такое Git Cherry pick
- Что такое force push
- Что такое pre-commit check
-
БД
- Что такое транзакция. Какие у неё есть свойства
- Какие команды управления транзакциями вы знаете
- Что такое уровни изолированности транзакций. Какие они бывают
- Что такое вложенные транзакции
- Что такое курсор и зачем он нужен
- Какая разница между PostgreSQL и MySQL
- Что такое VACUUM в PostgreSQL
- Что такое EXPLAIN. Какая разница между ним и EXPLAIN ANALYZE
- Какие виды Join'ов вы знаете, чем они отличаются друг от друга
-
Вопросы работодателю
- Вопросы HR'у
- Вопросы для технического собеседования
- Интересные ссылки
- Источники вопросов