learn-python

http://runestoneinteractive.org/

Надо вдумчиво прочитать и поэксперемнировать problem solving with algorithms

Про паттерны

Какие паттерны вы знаете:

  • Порождающие паттерны беспокоятся о гибком создании объектов без внесения в программу лишних зависимостей.

    • Фабричный метод служит для создания классов различной реализации с общим интерфейсом

    • Абстрактная фабрика служит для создания связанных классов

    • Прототип служит для копирования объектов, отдает реализацию копирования копируемуму классу

    • Строитель служит для создания объекта класса вслучае сложной инициализации. Позволяя вынести реализацию инициализации в отдельные методы. Делает пошаговую инициализацию

    • Одиночка (Singleton) единый экземпляр класса. В питоне реализуется как экспорт экземпляра класса из модуля

  • Структурные паттерны показывают различные способы построения связей между объектами.

    • Адаптер — позволяет объектам с несовместимыми интерфейсами работать вместе.

    • Мост - позволяет разделить реализацию от абстракции. Что есть абстракция?

      абстракция (или интерфейс) — это образный слой управления чем-либо. Он не делает работу самостоятельно, а делегирует её слою реализации (иногда называемому платформой)

    • Декоратор, позволяет добавлять объектам новую функциональность, оборачивая их в полезные «обёртки»

    • Компоновщик - позволяет объединить объекты в дерево для упрощения обработки. Представляет скомпонованные объекты как единый

    • Фасад — предоставляет простой интерфейс к сложной системе классов, библиотеке или фреймворку.

    • Легковес — позволяет экономить память, благодаря разделению общего состояния, вынесенного в один объект, между множеством объектов. В Python есть slots

    • Заместитель (Proxy) - это объект, который выступает прослойкой между клиентом и реальным сервисным объектом. Заместитель получает вызовы от клиента, выполняет свою функцию (контроль доступа, кеширование, изменение запроса и прочее), а затем передаёт вызов сервисному объекту. Можно использовать для тестирования mok

  • Поведенческие паттерны заботятся об эффективной коммуникации между объектами.

    • Цепочка обязанностей позволяет передавать запросы последовательно по цепочке обработчиков. Обработчик решает может ли он обработать запрос, стоит ли обрабатывать запрос далее.
    • Команда позволяющий заворачивать запросы или простые операции в отдельные объекты. Это позволяет откладывать выполнение команд, выстраивать их в очереди, а также хранить историю и делать отмену.
    • Итератор - даёт возможность последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления.
    • Посредник — позволяет уменьшить связанность множества классов между собой, благодаря перемещению этих связей в один класс-посредник. Пример диспетчер аэропорта.
    • Снимок позволяет сохранять и восстанавливать прошлые состояния объектов, не раскрывая подробностей их реализации. Pickled
    • Наблюдатель создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах. Signals?! Наблюдатель реализует механизм подписки.
    • Состояние позволяет динамически изменять поведение объекта при смене его состояния. Поведения, зависящие от состояния, переезжают в отдельные классы. Первоначальный класс хранит ссылку на один из таких объектов-состояний и делегирует ему работу.
    • Стратегия позволяет менять алгоритм решения
    • Шаблонный метод алгоритм зашит в класс родитель. Наследники реализует методы алгоритмы
    • Посетитель позволяет добавлять в программу новые действия

Todo

  • Обход дерева надо посмотреть алгоритмы по деревьям
  • Итератор, реализация. Вернуть элементы массива в случайном порядке
  • Генератор реализация
  • with реализация
  • декоратор реализация
  • SOLID - что это такое
  • DOCKER - настроить фигню какуюнибудь, простой респонз, с автоскейлом )
  • Конечный автомат
  • Можно попробовать на патерне конченый автомат реализовать валидацию скобок
  • Посетитель, можно реализовать интерпретатор с его помощью
  • metaclass

SOLID

Что такое HTTP:

HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных изначально — в виде гипертекстовых документов в формате «HTML», в настоящий момент используется для передачи произвольных данных GET и HEAD, часто применяется метод POST, OPTIONS ...

#Идемпотентность

свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом

REST stands for Representational State Transfer

Что такое CSRF-token

Что такое SOAP

SOAP протокол обмена xml-сообщениями

Что такое PEP8

Как Вы к нему относитесь?

Singleton

https://stackoverflow.com/questions/6760685/creating-a-singleton-in-python

Интересно, это потокобезопасно?

Что такое Метаклассы?

Советую полностью прочитать Метаклассы в Python (habr) либо Метаклассы в Python: что это такое и с чем его едят (tpproger).

  • Числовые. int, float, complex

  • Итерируемые. Реализуют iter Итератор iter (возвращает self) next

  • Типы последовательностей (Sequence Types):

    • list - массив, список
      • Lists - изменяемые последовательности, обычно используется для хранения однородных данных
    • tuple - кортеж, упорядоченное множество
      • Tuple - неизменяемые последовательности
    • range
      • неизменяемая последовательность
  • Текстовые последовательности - str

    • неизменяемы
  • Binary Sequence Types — bytes, bytearray, memoryview

    • bytes, неизменяемы
    • bytearray, изменяемы
    • memoryview, я думаю не изменяемы т/к указывают на конкретный кусок памяти
  • Set Types - типы множеств, сет

    • set, неупорядоченное множество уникальных хешируемых объектов
    • frozenset, неизменяемый сет
  • Типы отображения, Mapping Types - dict

  • NoneType, singleton, immutable

  • collections

immutable & mutable

Неизменяемы и изменяемые типы. Неизменяемы типы могут быть хешированы. Изменяемые нет Неизменяемый тип не может быть хеширован если содержит изменяемые значения

Raymond Hettinger

Генераторы vs итераторы

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

Интеграцио́нное тести́рование (англ. Integration testing, иногда называется англ. Integration and Testing, аббревиатура англ. I&T) — одна из фаз тестирования программного обеспечения, при которой отдельные программные модули объединяются и тестируются в группе. Обычно интеграционное тестирование проводится после модульного тестирования и предшествует системному тестированию.

Модульное тестирование, иногда блочное тестирование или юнит-тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы, наборы из одного или более программных модулей вместе с соответствующими управляющими данными, процедурами использования и обработки.

Систе́мное тести́рование програ́ммного обеспече́ния — это тестирование программного обеспечения (ПО), выполняемое на полной, интегрированной системе, с целью проверки соответствия системы исходным требованиям. Системное тестирование относится к методам тестирования чёрного ящика, и, тем самым, не требует знаний о внутреннем устройстве системы.

SQL

Транзакция - атомарность, консиннтентность

Плоские, или традиционные, транзакции, характеризуются четырьмя классическими свойствами: атомарности, согласованности, изолированности, долговечности (прочности) — ACID (Atomicity, Consistency, Isolation, Durability). Иногда традиционные транзакции называют ACID-транзакциями. Упомянутые выше свойства означают следующее:

  • Свойство атомарности (Atomicity) выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе.
  • Свойство согласованности (Consistency) гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных.
  • Свойство изолированности (Isolation) означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто они выполняются параллельно.
  • Свойство долговечности (Durability) трактуется следующим образом: если транзакция завершена успешно, то те изменения в данных, которые были ею произведены, не могут быть потеряны ни при каких обстоятельствах (даже в случае последующих ошибок).

#Теорема CAP (известная также как теорема Брюера) эвристическое утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:

  • согласованность данных (англ. consistency) — во всех вычислительных узлах в один момент времени данные не противоречат друг другу;
  • доступность (англ. availability) — любой запрос к распределённой системе завершается корректным откликом, однако без гарантии, что ответы всех узлов системы совпадают;
  • устойчивость к разделению (англ. partition tolerance) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.

DRF роуты и классы