- Языки программирования
- Структуры данных
- Сложность алгоритмов
- Алгоритмы сортировки
- Алгоритмы поиска
- MVC
- MVVM
- Паттерны
- Анти-паттерны
Компилируемый язык
- это такой язык, что программа, будучи скомпилированной, содержит инструкции целевой машины; этот машинный код непонятен людямИнтерпретируемый язык
- это такой, в котором инструкции не исполняются целевой машиной, а считываются и исполняются другой программой(например JS)
- Список
- Связный список
- Линейный
- Стэк
- Очередь
- Множество
- Граф
- Массив
- Динамический
- Гетерогенный
- Map (ассоциативный массив и словарь)
- Хэш-таблицы
- Деревья
- Двоичное дерево поиска
- Префиксное дерево
- Куча
- Двоичная куча
Сложность алгоритмов - Big O
- это такая зависимость времени от входных данных которая потребуется на выполнение алгоритма . O(n^2), O(n), O(N*log(N)), O(2^N) - криптография). Каждый вложенный цикл увеличивает N. Это то сколько операций нужно проделать что выполнить алгоритм
Больше о сложности алгоритмов:
- Пузырьком
- Шейкер
- Быстрая
- Прямым выбором
- Вставками
- Слиянием
- Шелла
- Последовательный
- Индексный
- Индексно-последовательный
- Бинарный
- DFS
- BFS
- Двунаправленный поиск
- Задача о кратчайшем пути
- Поиск по первому наилучшему совпадению
- Поиск элемента
MVC
- это конструкционный шаблон, который описывает способ построения структуры нашего приложения. Model - View - Controller: Model - информация о данных, контроллер - методы и работы с ними, view - отображение пользователю.
Больше информации о том как зачем MVC и примеры можно найти тут:
Паттерны
- повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.
Есть три основных "типа" паттернов:
- Порождающие - Отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов.
- Структурные - Отвечают за построение удобных в поддержке иерархий классов.
- Поведенческие - Решают задачи эффективного и безопасного взаимодействия между объектами программы.
Больше информации о паттернах и примеры:
Некоторые примеры:
- 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 (антоним жесткому кодированию) - когда существует один большой файл конфигурации с помощью которого задают все "переменные".
- Лодочный якорь - это остаются не используемые куски кода, после рефакторинга)
- Создание велосипеда
- Бездумное комментирование - излишнее комментирование кода. В любом случае комментарии кода нужен в очень редких случаях. Если поймали себя на мысли, что нужно написать комментарий к коду, значит код слишком сложный и его нужно разбивать на более мелкие части.
- Слепая вера - думать что в функцию будут всегда попадать только параметры одного типа и никогда не выполнять проверку тип входящих параметров
Больше примеров: