О чём этот раздел?¶
О программировании. Паттерны, сниппеты, обзоры библиотек и так далее. Можно использовать для подготовки к собесам.
Ссылки¶
- Где решать задачи по программированию, чтобы пройти путь from zero to hero
- Алгоритмика - материалы CS курсов, очень много про структуры данных и алгосики
- The Data Engineering Handbook - хенбук для датаинжиров
Базовые определения¶
Интроспекция¶
Интроспекция - это возможность запросить тип и данные о его внутренней структуре
Область видимости переменных¶
Область видимости переменных - это такое свойство, которое определяет, можно ли использовать какую-то переменную и как её можно использовать из разных частей программы.
Процесс¶
Процесс - это такая сущность, которая создается ОС для выполнения программы. Процесс имеет собственное адресное пространство, дескрипторы и так далее.
1. В Python процессы это копии интерпретатора.
Поток¶
Поток - это объект внутри процесса, который что-то выполняет. Поток использует все доступные процессу ресурсы (адресное пространство и т.д.)
Класс (в ООП)¶
Класс, это такая логическая структура которая содержит данные и функции, которые отражают какое либо поведение или моделируют какую либо сущность. Класс описывает устройство объекта.
Метакласс¶
Метакласс - это класс, который управляет созданием класса в рантайме.
Inversion of Control¶
IoC (Inversion of Control, Инверсия контроля) - это паттерн, предназначенный для передачи вызова какого либо компонента внешнему обработчику.
Пример - работа web-фреимворка. Программист здесь должен разместить свой код в определенных точках выполнения (подключить свои обработчики) и запустить главную функцию фреимворка, которая обеспечит выполнение его функций (при попадании данных на обработчик, обработчики написанные программистом выполнятся).
Dependency Injection¶
Dependency Injection (DI, инъекция зависимостей) - это одна из форм IoC. Обработчики должны передаваться в объект через конструкторы, параметры, сеттеры, а не создаваться напрямую в самом объекте, который использует их.
IO bound¶
Это задачи, где производительность ограничивается скоростью ввода/вывода данных. В таких задачах большая часть времени уходит чтение и запись данных на диск, сетевые запросы, работу с внешними устройствами.
Основная стратегия для улучшения производительности таких задач заключается в параллельной или асинхронной обработке I/O чтобы минимизировать время ожидания и максимально использовать доступные ресурсы.
CPU bound¶
Это задачи, производительность которых ограничена скоростью и мощностью процессора. В таких задачах основное время уходит на выполнение вычислений или обработку данных.
Основная стратегия улучшения производительности - оптимизация вычислений, параллелизация (многопоточность, многопроцессорность), раскидывание задач на несколько серверов.