Tip
Если вы что-то не можете объяснить шестилетнему ребёнку, вы сами этого не понимаете (c) Альберт Эйнштейн
Это просто набор кратких описаний, предназначенный, в первую очередь, структурировать знания и быстро вспомнить, то что знаешь, но давно не использовал на практике. Так же будет полезен для подготовки к собеседованиям и просто освежить знания. Если окажется полезным кому-то еще, то буду только рад. :)
В некоторых текстах присутствуют вставки, озаглавленные AIUI (As I Understand It - насколько я понимаю) - это блоки с краткой выжимкой того, как я понимаю описание, тему, понятие.
Important
Если вы заметили ошибку, неточность, нехватку информации, пожалуйста, сообщите мне.
Tip
Компьютер хорошо выполняет инструкции, а не читает ваши мысли.
- WIP: Декларативное программирование
- WIP: Императивное программирование
- WIP: Логическое программирование
- WIP: Объектно-ориентированное программирование (ООП)
- WIP: Структурное программирование
- WIP: Функциональное программирование
- WIP: Экстремальное программирование
- WIP: Автоматное программирование
- WIP: Аппликативное программирование
- WIP: Аспектно-ориентированное программирование (АОП)
- WIP: Грамотное программирование
- WIP: Доказательное программирование
- WIP: Контрактное программирование
- WIP: Обобщённое программирование
- WIP: Порождающее программирование
- WIP: Процедурное программирование
- WIP: Событийно-ориентированное программирование
Tip
Пишите код так, как будто поддерживать его будет склонный к насилию психопат, который знает, где вы живёте (c) Джон Ф. Вудс
- Требования ACID - Набор требований к транзакционной системе для надёжности и предсказуемости.
- Атомарность - Никакая транзакция не должна быть зафиксирована в системе частично.
- Изоляция - Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.
- Согласованность - Завершенная транзакция сохраняет согласованность базы данных.
- Устойчивость - Независимо от проблем, изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными.
- WIP: Подход BASE
- WIP: Подход CAP
- Принцип DRY - Не повторяй свой код. Избегайте дублирования кода без острой необходимости.
- Принципы KISS - Делай это проще. Разбивайте задачи, сначала решение задачи, потом код. Делайте классы и методы маленькими. Не бойтесь избавляться от кода.
- Принципы SOLID - Способствует созданию такой системы, которую будет легко поддерживать и расширять в течение долгого времени.
- S - Принцип единственной ответственности. Предлагает разделять универсальные классы на конкретные, что сделает их простыми и лёгкими в обслуживании.
- O - Принцип открытости/закрытости. Сущности должны быть открыты для расширения, но закрыты для модификации.
- L - Принцип подстановки Лисков. Производный класс должен сохранять все свойства базового класса и не изменять их семантику.
- I - Принцип разделения интерфейса. Слишком большие интерфейсы необходимо разделять на более маленькие и специфические.
- D - Принцип инверсии зависимостей. Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций.
- Принципы YAGNI - Не стоит создавать код, который может понадобиться потом, так как "потом" может никогда не наступить.
- Закон Деметры - Можно вызывать только методы/переменные самого класса или методы и переменные класса переданного как зависимость.
- Подход MIT - Подход к разработке делающий упор на реализации, логичности и покрытию максимального количества важных ситуаций.
- Подход "Чем хуже, тем лучше" - Подход к разработке, объявляющий простоту реализации и интерфейса более важными, чем другие свойства системы.
- Агрегирование (Aggregation) - Отношения между объектами, когда при создании нового объекта ему передаются уже существующие объекты.
- Ассоциация (Association) - Отношения между объектами, когда один объект может вызвать другой объект, чтобы выполнить действия от его имени.
- Ковариантность и контрвариантность - Способы переноса наследования типов на производные от них типы.
- Инвариантность (Invariance) - Наследование типов не переносится на производные.
- Ковариантность (Covariance) - Перенос наследования типов на производные от них типы в прямом порядке.
- Контравариантность (Contravariance) - Перенос наследования типов на производные от них типы в обратном порядке.
- Композиция (Composition) - Отношения между объектами, когда при создании нового объекта создаются все необходимые ему дополнительные объекты.
- Наследование (Inheritance) - Когда класс наследуется от родительского класса, он приобретает все характеристики родительского класса.
- Отношение HAS-A - Сокращенное описание "класс В содержит параметр с экземпляром(-ами) класса С".
- Отношение IS-A - Сокращенное описание "класс С является наследником/расширением/реализацией класса/интерфейса В".
- Анонимная функция (Anonymous function) - Объявляется в месте использования и не получает уникального идентификатора для доступа к ней.
- Замыкание (Closure) - Функция ссылается на переменные, не содержащиеся в её теле.
- WIP: Каррирование (Carrining)
- Лямбда-выражение (Lambda expression) - Специальный синтаксис для объявления анонимных функций.
- Мемоизация, Табулирование, Кэш (Memoization) - Сохранение результатов выполнения функций для предотвращения повторных вычислений.
- WIP: Перегрузка (Overload)
- Рекурсия (Recursion) - Поведение функции, при котором она вызывает сама себя.
- Функции первого (высшего) класса (порядка) - Принимает в качестве аргументов другие функции и/или возвращающая другую функцию.
- Чистая функция (Pure function) - Зависит только от своих объявленных входных данных и своей реализации для получения результата.
- Абстракция (Abstraction) - Выделение общих характеристик объектов, их свойств и методов, без деталей реализации.
- Идемпотентность (Idempotency) - Когда повторное применение операции или обращение к объекту будет давать тот же результат, что и при первом.
- Иммутабельность (Immutability) - После создания данные или структура, которая их содержит, не могут быть изменены.
- Инкапсуляция (Encapsulation) - Ограждает группу методов или данных от внешнего вмешательства или неправильного использования.
- WIP: Полиморфизм (Polymorphism)
- Реентерабельность (Reentrant) - Oдна и та же инструкция программы может быть совместно использована несколькими пользователями или процессами.
- WIP: Без сохранения состояния (Stateless)
- WIP: Детерминирование (Determination)
- WIP: Зацепление (Coupling)
- WIP: Класс (Class)
- WIP: Конечный автомат (Finite-state machine, FSM)
- WIP: Прототип (Prototype)
- WIP: Связность|связанность (Cohesion)
- WIP: Сохранение состояния (Statefull)
- WIP: Устойчивость (Persistence)
Tip
Вот вы говорите "электронный документооборот". А вы знаете сколько из-за него ежегодно вырубают бинарных деревьев?
- WIP: Структуры данных
- WIP: Абстрактные типы данных
- Простые структуры данных - типы данных - Примитивы, базовые элементы. Составная часть сложных структур данных.
- Сложные (интегрированные) структуры данных: - Состоят из примитивов или других структур данных.
- Статические - Структурированное множество простых структур.
- Полустатические - Последовательность данных, связанная отношениями линейного списка.
- Динамические - Не обладают постоянным размером. Обеспечивает высокую изменчивость структуры.
- Линейные
- Нелинейные
- Связные и несвязные
- Массив (Array), Вектор (Vector), Матрица (Matrix)
- Стеки (Stacks)
- Очереди (Queues)
- Списки (Lists)
- WIP: Односвязнный (однонаправленный) список (Single-linked list)
- WIP: Двусвязнный (двунаправленный) список (Double-linked list)
- WIP: Кольцевой связный список (Ring linked list)
- WIP: Развёрнутый связный список (Expanded linked list)
- WIP: Список с пропусками (Skip List)
- WIP: XOR-связный список (XOR linked list)
- Хэш-таблицы, Хэш-мапы (Hash tables, Hash Maps)
- Множества, Хэш-сеты (Sets, Hash Sets)
- Карты, Словари (Maps, Dictionaries)
- Графы (Graphs)
- WIP: Деревья (Trees)
- WIP: Бинарное дерево (Binary tree)
- WIP: Бинарное дерево поиска (Binary search tree)
- WIP: Красно-чёрное дерево (Red-black tree)
- WIP: AVL-дерево (AVL tree)
- WIP: T-дерево (T-tree)
- WIP: Декартово дерево (Cartesian tree)
- WIP: B-дерево (B-tree)
- WIP: R-дерево (B-tree)
- WIP: Splay дерево (Splay tree)
- WIP: KD дерево (KD tree)
- WIP: Деревья квадрантов (Quadrant trees)
- WIP: K-мерные деревья (K-dimensional trees)
- WIP: Префиксные деревья, Бор, Нагруженные деревья (Trie, Prefix Trees)
- Кучи (Heaps)
- Запись (Record)
- Кортеж (Tuple)
Tip
Вы никогда не задумывались, какое количество психических сил потрачено разработчиками на попытки понять различие между алгоритмом и программой...
- WIP: Быстрая сортировка
- WIP: Параллельная кеш-независимая сортировка
- WIP: Пузырьковая сортировка
- WIP: Рандомизированный алгоритм
- WIP: Сортировка вставками
- WIP: Сортировка выбором
- WIP: Сортировка кучей
- WIP: Сортировка слиянием
- WIP: Бинарный поиск
- WIP: Линейный поиск
- WIP: Поиск в массиве
- WIP: Обход связного списка
- WIP: Операции с очередью
- WIP: Операции со стэком
- WIP: Работа с хеш-таблицами
- WIP: Разворачивание однонаправленного списка
- WIP: Алгоритм Дейкстры
- WIP: Алгоритм Флойда-Уоршелла
- WIP: Алгоритмы работы с бинарными деревьями
- WIP: Градиентный спуск
- WIP: Поиск (обход) в глубину
- WIP: Поиск (обход) в ширину
- WIP: Задача о наибольшей общей подпоследовательности (Longest Common Subsequence)
- WIP: Задача о рюкзаке
- WIP: Расстановка ферзей (Проблема N-ферзей)
Tip
Всегда мало времени, чтобы разработать проект, но его всегда хватает, чтобы сделать в 2 раза больше багов.
- WIP: Гексагональная архитектура (Hexagonal Architecture)
- WIP: Клиент-серверная архитектура (Client–Server Architecture)
- WIP: Микролитная архитектура (Microlite architecture)
- WIP: Микросервисная архитектура (Microservice architecture, MSA)
- WIP: Микроядерная архитектура (Microkernel architecture)
- WIP: Многоуровневая архитектура (N-tier)
- WIP: Монолитная архитектура (Monolith architecture)
- WIP: Одноранговая архитектура (Peer-to-Peer Architecture)
- WIP: Поток данных (Dataflow)
- WIP: Распределенный монолит (Distributed Monolith)
- WIP: Реплицированные сервисы с распределением нагрузки (RLBS)
- WIP: Сервис-ориентированная архитектура (Service-Oriented Architecture, SOA)
- WIP: Слоистая архитектура (Onion architecture)
- WIP: Событийно-ориентированная архитектура (Event-Driven Architecture)
- WIP: Чистая архитектура (Clean Architecture)
- WIP: Анемичная модель (Anemic Domain Model)
- WIP: Богатая модель (Rich Domain Model)
- WIP: Вертикальное масштабирование (Vertical Scaling)
- WIP: Горизонтальное масштабирование (Horizontal Scaling)
- WIP: Ориентированное на данные (Data-Driven Design)
- WIP: Предметно-ориентированное (Domain-Driven Design, DDD)
- WIP: Хостинг статического контента (Static Content Hosting)
- WIP: Шардирование (Sharding)
- Внедрение зависимостей (Dependency Injection, DI)
- WIP: Делегирование (Delegation)
- WIP: Душитель (Strangler Fig)
- WIP: Иерархические Модель-Представление-Контроллер (Hierarchical model–view–controller, HMVC)
- WIP: Инверсия зависимостей (Dependency Inversion Principle, DIP)
- WIP: Инверсия управления (Inversion of Control, IoC)
- WIP: Каналы и фильтры (Pipes & Filters)
- WIP: Контейнер внедрения зависимостей (Dependency Injection Container, DIC)
- WIP: Контроллер страницы (Page Controller)
- WIP: Модель-Представление-Контроллер (Model-View-Controller, MVC)
- WIP: Модель-Представление-МодельПредставления (Model-View-ViewModel, MVVM)
- WIP: Модель-Представление-Представитель (Model-View-Presenter, MVP)
- WIP: Направленная отправка (Hinted Handoff)
- WIP: Обратное проксирование (Reverse Proxy)
- WIP: Ограничение скорости (Rate Limiting)
- WIP: Разделение команд и запросов (Command and Query Responsibility Segregation, CQRS)
- WIP: Разделенный мозг (Split-Brain)
- WIP: Распределение нагрузки (Load Balancer)
- WIP: Реестр (Registry)
- WIP: Состояние-Модель-Представление (State-Model-View, SMV)
- WIP: Разделение по бизнес-возможностям (Decomposition by Business Capability)
- WIP: Разделение по данным (Decomposition by Data)
- WIP: Разделение по пользовательскому интерфейсу (Decomposition by UI)
- WIP: Разделение по предметным областям (Decomposition by Domain)
- WIP: Разделение по протоколу коммуникации (Decomposition by Communication Protocol)
- WIP: Разделение по развертыванию (Decomposition by Deployment)
- WIP: API-композиция (API Composition)
- WIP: API-шлюз (API Gateway)
- WIP: Агрегация логов (Log Aggregation)
- WIP: Асинхронный обмен сообщениями (Async Messaging)
- WIP: База данных на сервис (Database per service)
- WIP: Бэкенды для фронтендов (Backends for Frontends, BFF)
- WIP: Внешняя конфигурация (External Configuration)
- WIP: Вспомогательный сервис (Sidecar)
- WIP: Единая точка входа (Front Controller)
- WIP: Источник событий (Event Sourcing)
- WIP: Контракты, определяемые потребителем (Consumer-Driven Contracts)
- WIP: Многовариантное хранение (Polyglot Persistence)
- WIP: Обнаружение сервисов на стороне клиента (Client-Side Service Discovery)
- WIP: Обнаружение сервисов на стороне сервера (Server-Side Service Discovery)
- WIP: Отсек, Переборка (Bulkhead)
- WIP: Повторная попытка (Retry)
- WIP: Посол, Посредник (Ambassador)
- WIP: Предохранитель, Автовыключение (Circuit Breaker)
- WIP: Проверки здоровья (Health Check)
- WIP: Распределенная трассировка (Distributed Tracing)
- WIP: Реестр сервисов (Service Registry)
- WIP: Сага (Saga)
- WIP: Сборка пользовательского интерфейса на стороне клиента (Client-Side UI Composition)
- WIP: Сборка фрагментов страниц на стороне сервера (Server-Side Page Fragment Composition)
- WIP: Сервисы без состояния (Stateless Services)
- WIP: Сине-зеленое развертывание (Blue-Green Deployment)
- WIP: Теневое развертывание (Shadow Deployment)
- WIP: Умные конечные точки, глупые каналы (Smart Endpoints, Dumb Pipes)
- WIP: Фронтенды для Бэкендов (Frontends for Backends, FFB)
- WIP: Шардинг данных (Data Sharding)
- WIP: Экземпляр сервиса на хост (Service Instance Per Host)
- WIP: Активная запись (Active Record, AR)
- WIP: Двухфазная фиксация (2PC)
- WIP: Упреждающая журнализация (Write-Ahead Log)
- WIP: Чтение с восстановлением (Read Repair)
General Responsibility Assignment Software Patterns. Шаблоны проектирования, используемые для решения общих задач по назначению обязанностей классам и объектам. Описано девять GRAPS шаблонов. Паттерны не имеют выраженной структуры, четкой области применения и конкретной решаемой проблемы, а лишь представляют собой обобщенные подходы/рекомендации/принципы, используемые при проектировании дизайна системы. Это распределение ролей и ответственностей между всеми объектами, а также свойства, которыми эти объекты должны обладать для того, чтобы гармонично исполнять свои роли.
- WIP: GRASP: Высокое зацепление (High Cohesion)
- GRASP: Информационный эксперт (Information Expert)
- WIP: GRASP: Контроллер (Controller)
- WIP: GRASP: Низкая связанность (Low Coupling)
- WIP: GRASP: Перенаправление (Indirection)
- WIP: GRASP: Полиморфизм (Polymorphism)
- WIP: GRASP: Создатель (Creator)
- WIP: GRASP: Устойчивый к изменениям (Protected Variations)
- WIP: GRASP: Чистая выдумка (Pure Fabrication)
Gangs Of Four (Банда четырех). В 1995 году Эрих Гамм, Ричард Хелм, Ральф Джонсон и Джон Влиссидес написали книгу "Design Patterns: Elements of Reusable Object-Oriented Software", в которой применили концепцию типовых паттернов в программировании. В книгу вошли 23 паттерна, решающие различные проблемы объектно-ориентированного дизайна.
- WIP: GoF: Поведенческий: Итератор (iterator)
- WIP: GoF: Поведенческий: Команда (Command)
- WIP: GoF: Поведенческий: Наблюдатель (Observer)
- WIP: GoF: Поведенческий: Посетитель (Visitor)
- WIP: GoF: Поведенческий: Посредник (Mediator)
- WIP: GoF: Поведенческий: Снимок (Memento)
- WIP: GoF: Поведенческий: Состояние (State)
- WIP: GoF: Поведенческий: Стратегия (Strategy)
- WIP: GoF: Поведенческий: Цепочка обязанностей (Chain of Responsibility)
- WIP: GoF: Поведенческий: Шаблонный метод (Template Method)
- WIP: GoF: Порождающий: Абстрактная Фабрика (Abstract Factory)
- WIP: GoF: Порождающий: Одиночка (Singleton)
- WIP: GoF: Порождающий: Прототип (Prototype)
- WIP: GoF: Порождающий: Строитель (Builder)
- WIP: GoF: Порождающий: Фабричный метод (Factory, Factory Method)
- WIP: GoF: Структурный: Адаптер (Adapter)
- WIP: GoF: Структурный: Декоратор (Decorator)
- WIP: GoF: Структурный: Заместитель (Proxy)
- WIP: GoF: Структурный: Компоновщик (Composite)
- WIP: GoF: Структурный: Легковес (Flyweight)
- WIP: GoF: Структурный: Мост (Bridge)
- WIP: GoF: Структурный: Фасад (Facade)
- WIP: Ленивая загрузка (Lazy Load)
- WIP: Поставщик/потребитель (Producer/Consumer)
- WIP: Преобразователь данных (Data Mapper)
- WIP: Репозиторий (Repository)
Tip
А ты не чувствуешь красоту мира?
Честно говоря, я сейчас чувствую только отсутствие http.
- WIP: HTTP
- WIP: HTTP2 (HTTP/2, HTTP/2.0)
- WIP: TCP/IP
- WIP: TLS
- WebSocket - Двусторонний обмен сообщениями между клиентом и сервером поверх ТСР соединения.
- События, посылаемые сервером (Server-Sent Events, SSE) - Односторонние сообщения от сервера к клиенту поверх HTTP соединения.
- WIP: Длинный опрос (Long Polling)
- WIP: Короткий опрос (Short Polling)
- WIP: Джиттер (Jitter)
- WIP: Удалённый вызов процедур (Remote Procedure Call, RPC)
Tip
SQL-запрос заходит в бар, подходит к двум столам и спрашивает: "можно присоединиться?"
- WIP: Нормализация и денормализация
- WIP: Связь многие ко многим (Many-to-many)
- WIP: Связь один ко многим (One-to-many)
- WIP: Связь один к одному (One-to-one)
- WIP: CRUD
- WIP: Шардирование баз данных
- WIP: Типы баз данных
- WIP: Индексы
- Транзакции - набор последовательных операций с базой данных, соединенных в одну логическую единицу
- Уровень изоляции Read uncommitted - доступ к еще не подтвержденным завершением транзакции данным.
- Уровень изоляции Read committed - доступ только к подтвержденным завершением транзакции данным.
- Уровень изоляции Repeatable read или Snapshot isolation - доступ к снепшоту данных созданному в начале транзакции.
- Уровень изоляции Serializable - никакого доступа к данным до завершения транзакции.
- WIP: Соединения с сопоставлениями строк (JOIN)
- WIP: Типы данных
- Индексы
- WIP: Транзакции
- WIP: Блокировки
- WIP: Фильтрация (HAVING)
- WIP: Группировка (GROUP BY)
- WIP: Многоуровневая группировка (GROUPING SETS)
- WIP: Вычисление итогов (CUBE)
- WIP: Вычисление итогов (ROLLUP)
- WIP: Оконные функции
- WIP: Процедурные функции
- WIP: Статистика содержимого таблиц (ANALYZE)
- WIP: План выполнения (EXPLAIN)
- Освобождение пространства (VACUUM) - Высвобождает пространство, занимаемое "мёртвыми" данными. При параметре ANALYZE обновляет статистику, которую использует планировщик.
- Карта видимости - Внутренние данные, в каких страницах есть только записи, видимые для всех активных и всех будущих транзакций.
- WIP: Оптимизация
- WIP: Полезные приемы
- WIP: Виды индексов
- WIP: Транзакции
Tip
Люди, которые пишут всю свою мысль в одном большом сообщении, вы отбитые? Те кто по одному слову отправляет миллион сообщений - к вам вопросов нет.
Tip
Работа программиста и шамана имеет много общего - оба бормочут непонятные слова, совершают непонятные действия и не могут объяснить, как оно работает.
- WIP: Интерфейсы
- WIP: Типы
Tip
Тяжелые времена порождают сильных программистов. Сильные программисты создают фреймворки. Фреймворки порождают слабых программистов. Слабые программисты порождают тяжелые времена.
Tip
Здравствуйте, это канал об аниме? Как мне пропатчить KDE2 под FreeBSD?
Tip
Видишь суслика?
Нет...
А он есть... (c) к/ф "ДМБ"
- WIP: Мониторинг сервисов
Tip
Джун: Где документация?
Тимлид: Я и есть документация.
Tip
Не повторяйте одну и ту же ошибку в вашем коде снова и снова. Создайте функцию с ней и вызывайте её каждый раз, когда понадобится.
Tip
Один монитор - обычный программист, два монитора - продвинутый программист, три монитора - системный программист, четыре монитора - охранник.
- WIP: Метрики сотрудников
Tip
Есть два способа написать сложную программу: либо сделать ее настолько простой, что будет казаться, что она проста как два плюс два, либо сделать ее настолько сложной, что невозможно найти ошибки
- Найти пересечение двух массивов
- Очистить массив от повторов
- Перевернуть строку
- Порядок выполнения - 1 (var)
- Порядок выполнения - 2 (Promise и setTimeout)
- Проверить, является ли строка зеркальной
- Проверить, является ли строка палиндромом
- Проверка порядка скобок
- Что выведет функция - 1 (let)
- Что выведет функция - 2 (let)