Ежеси на небеси
Пройдемся по базе
Теоретическая часть
Модули, знание которых может быть полезно в ответах на вопросы:
abc, argparse, asyncio, collections, concurrent.futures, contextlib,
copy, cProfile, csv, enum, gc, glob, heapq, importlib, inspect, io,
json, logging, mmap, multiprocessing, os, os.path, pdb, pickle, re,
readline, select, selectors, signal, socket, struct, subprocess, sys,
this, threading, time, timeit, unicodedata, unittest, unittest.mock,
weakref
Список вопросов
- Базовые структуры данных. Встроенные типы данных. Оценка сложности базовых операций. Примеры уместного использования. Мутабельность и хешируемость. Структуры defaultdict, Counter, namedtuple, heapq, enum.
- Объектная модель Python. «Всё есть объект», type. Классы. Атрибуты объектов, классов. Методы. Статические и классовые методы. Наследование. Интроспекция.
- Модель памяти Python. Области видимости, время жизни объекта. Создание и удаление объектов. Поверхностное и глубокое копирование. Слабые ссылки. Сборка мусора в Python.
- Работа с текстовыми данными. Тип данных str. Юникод и кодировки. Текстовые файлы. Разбор текстовых данных. Регулярные выражения.
- Работа с бинарными данными. Типы данных bytes, bytearray, memoryview. Бинарные файлы. Разбор бинарных данных. Порядок байт, разрядность бинарных типов данных.
- Работа с файловой системой. Работа с файлами: поиск на ФС, открытие, чтение, запись и т.п. Чтение директорий. Получение метаинформации о файлах. Ошибки, возникающие при работе с файлами.
- Модули и пакеты. Импорт. Объект модуля, система дистрибуции пакетов в Python. Способы импортирования модулей. Относительные и абсолютные импорты. Пакеты. Система поиска и загрузки модулей.
- Многопоточное программирование. Многопоточность в Python. GIL. Обмен данными между потоками. Проблемы, специфичные для многопоточных программ. Использование пулов потоков.
- Процессы. Мультипроцессинг в Python. Запуск и коммуникация с другими программами. Обмен данными между процессами. Сигналы, пайпы, работа с общими дескрипторами. Использование пулов процессов.
- Асинхронное программирование. Кооперативная многозадачность. Мультиплексирование потоков ввода-вывода (select, poll, epoll). Event loop. async/await.
- Сериализация. Задачи сериализации, проблемы сериализации. Бинарные и текстовые форматы сериализации, специфичные для языка; общие форматы.
- Тестирование. Мотивация. Виды тестирования. Метрики качества тестов. Проблемы тестирования. Подходы к проектированию тестируемого ПО.
- Пользовательские интерфейсы. Обработка параметров запуска, переменные окружения. Виды интерфейсов: CLI, CUI, GUI и особенности ввода/вывода. Парадигмы машины и часов. Подходы к проектированию GUI на Python (на примере PyQt*, tkinter или аналогичных).
- Работа с сетью. Сетевые клиент и сервер. TCP и UDP сокеты. Синхронный и асинхронный приём-передача данных. Текстовые и бинарные протоколы. Проектирование протоколов передачи данных. Способы одновременной обработки нескольких подключений.
- Отладка, обработка ошибок, логирование. Способы оповещения об ошибках и обработки ошибок. Механизм исключений и менеджеры контекстов. Подходы к организации логирования.
- Профилирование. Задачи профилирования. Объекты профилирования. Способы профилирования, их преимущества и недостатки. Способы измерения времени работы программы.