Skip to content

Latest commit

 

History

History
220 lines (167 loc) · 9.55 KB

File metadata and controls

220 lines (167 loc) · 9.55 KB

Base

Структура

Языки программирования

  • Компилируемый язык - это такой язык, что программа, будучи скомпилированной, содержит инструкции целевой машины; этот машинный код непонятен людям
  • Интерпретируемый язык- это такой, в котором инструкции не исполняются целевой машиной, а считываются и исполняются другой программой(например JS)

Структуры данных

  • Список
    • Связный список
    • Линейный
  • Стэк
  • Очередь
  • Множество
  • Граф
  • Массив
    • Динамический
    • Гетерогенный
    • Map (ассоциативный массив и словарь)
    • Хэш-таблицы
  • Деревья
    • Двоичное дерево поиска
    • Префиксное дерево
    • Куча
    • Двоичная куча

Сложность алгоритмов

Сложность алгоритмов - Big O - это такая зависимость времени от входных данных которая потребуется на выполнение алгоритма . O(n^2), O(n), O(N*log(N)), O(2^N) - криптография). Каждый вложенный цикл увеличивает N. Это то сколько операций нужно проделать что выполнить алгоритм

Больше о сложности алгоритмов:

Алгоритмы сортировки

  • Пузырьком
  • Шейкер
  • Быстрая
  • Прямым выбором
  • Вставками
  • Слиянием
  • Шелла

Алгоритмы поиска

Массивы

  • Последовательный
  • Индексный
  • Индексно-последовательный
  • Бинарный

Граф

  • DFS
  • BFS
  • Двунаправленный поиск
  • Задача о кратчайшем пути
  • Поиск по первому наилучшему совпадению

Дерево

  • Поиск элемента

MVC

MVC - это конструкционный шаблон, который описывает способ построения структуры нашего приложения. Model - View - Controller: Model - информация о данных, контроллер - методы и работы с ними, view - отображение пользователю.

Больше информации о том как зачем MVC и примеры можно найти тут:

MVVM

Паттерны

Паттерны - повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.

Есть три основных "типа" паттернов:

  • Порождающие - Отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов.
  • Структурные - Отвечают за построение удобных в поддержке иерархий классов.
  • Поведенческие - Решают задачи эффективного и безопасного взаимодействия между объектами программы.

Больше информации о паттернах и примеры:

Некоторые примеры:

  • Constructor
function Man(name) {
    this.name = name;
}
  • Factory(возвращает тот или иной инстанс в зависимости от входных параметров):
function BallFactory(ballType) {
    let ball = {};
    if (ballType === 'football') {
        ball = new FootBall();
    }
    if (ballType === 'basketball') {
        ball = new BasketBall();
    }
    return ball;
}
  • Prototype(создание новых объектов на основе уже существующих объектов):
const parent = {
    prop1: '.....',
    prop2: '.....',
    method1: () => {}
    method2: () => {}
}
const child = Object.create(parent, { ownProp: { value: '....'}});
  • Decorator
function SomeClass() {
    prop1 ...
    prop2 ...
    method1 ...
    methid2 ...
}
function decorator(obj) {
    obj.addedmethod = () {}
}

const decoratedObj  = decoratoR(new SomeClass());

Анти-паттерны

Анти-паттерны - это — шаблоны ошибок, которые совершаются при решении различных задач.

  • Magic Numbers
function(a, b = 42) {}
  • Hard code (жесткое кодирование)
fetch('https://website/api/v1/user');
fetch('https://website/api/v1/todo');
fetch('https://website/api/v1/list');
  • Blob - один класс который умеет все
  • Spagetti code - плохо спроектированная, слабо структурированная, запутанная и трудная для понимания программа
  • Copy paste -повторяющиеся куски кода
  • Golden hummer (Золотой молоток) - уверенность в полной универсальности любого решения. На практике, это — применение одного решения (чаще всего какого-либо одного паттерна проектирования) для всех возможных и невозможных задач
  • Soft code (антоним жесткому кодированию) - когда существует один большой файл конфигурации с помощью которого задают все "переменные".
  • Лодочный якорь - это остаются не используемые куски кода, после рефакторинга)
  • Создание велосипеда
  • Бездумное комментирование - излишнее комментирование кода. В любом случае комментарии кода нужен в очень редких случаях. Если поймали себя на мысли, что нужно написать комментарий к коду, значит код слишком сложный и его нужно разбивать на более мелкие части.
  • Слепая вера - думать что в функцию будут всегда попадать только параметры одного типа и никогда не выполнять проверку тип входящих параметров

Больше примеров: