Thanks to visit codestin.com
Credit goes to github.com

Skip to content

PragmaWolf/cheatsheets

Repository files navigation

Programming Cheatsheets (Шпаргалки по программированию)

Tip

Если вы что-то не можете объяснить шестилетнему ребёнку, вы сами этого не понимаете (c) Альберт Эйнштейн

Это просто набор кратких описаний, предназначенный, в первую очередь, структурировать знания и быстро вспомнить, то что знаешь, но давно не использовал на практике. Так же будет полезен для подготовки к собеседованиям и просто освежить знания. Если окажется полезным кому-то еще, то буду только рад. :)

В некоторых текстах присутствуют вставки, озаглавленные AIUI (As I Understand It - насколько я понимаю) - это блоки с краткой выжимкой того, как я понимаю описание, тему, понятие.

Important

Если вы заметили ошибку, неточность, нехватку информации, пожалуйста, сообщите мне.


Парадигмы

Tip

Компьютер хорошо выполняет инструкции, а не читает ваши мысли.

Основные модели

Подходы и приёмы


Концепции, понятия, термины

Tip

Пишите код так, как будто поддерживать его будет склонный к насилию психопат, который знает, где вы живёте (c) Джон Ф. Вудс

Правила

  • Требования ACID - Набор требований к транзакционной системе для надёжности и предсказуемости.
    • Атомарность - Никакая транзакция не должна быть зафиксирована в системе частично.
    • Изоляция - Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.
    • Согласованность - Завершенная транзакция сохраняет согласованность базы данных.
    • Устойчивость - Независимо от проблем, изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными.
  • WIP: Подход BASE
  • WIP: Подход CAP
  • Принцип DRY - Не повторяй свой код. Избегайте дублирования кода без острой необходимости.
  • Принципы KISS - Делай это проще. Разбивайте задачи, сначала решение задачи, потом код. Делайте классы и методы маленькими. Не бойтесь избавляться от кода.
  • Принципы SOLID - Способствует созданию такой системы, которую будет легко поддерживать и расширять в течение долгого времени.
    • S - Принцип единственной ответственности. Предлагает разделять универсальные классы на конкретные, что сделает их простыми и лёгкими в обслуживании.
    • O - Принцип открытости/закрытости. Сущности должны быть открыты для расширения, но закрыты для модификации.
    • L - Принцип подстановки Лисков. Производный класс должен сохранять все свойства базового класса и не изменять их семантику.
    • I - Принцип разделения интерфейса. Слишком большие интерфейсы необходимо разделять на более маленькие и специфические.
    • D - Принцип инверсии зависимостей. Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций.
  • Принципы YAGNI - Не стоит создавать код, который может понадобиться потом, так как "потом" может никогда не наступить.
  • Закон Деметры - Можно вызывать только методы/переменные самого класса или методы и переменные класса переданного как зависимость.
  • Подход MIT - Подход к разработке делающий упор на реализации, логичности и покрытию максимального количества важных ситуаций.
  • Подход "Чем хуже, тем лучше" - Подход к разработке, объявляющий простоту реализации и интерфейса более важными, чем другие свойства системы.

Отношения

  • Агрегирование (Aggregation) - Отношения между объектами, когда при создании нового объекта ему передаются уже существующие объекты.
  • Ассоциация (Association) - Отношения между объектами, когда один объект может вызвать другой объект, чтобы выполнить действия от его имени.
  • Ковариантность и контрвариантность - Способы переноса наследования типов на производные от них типы.
  • Композиция (Composition) - Отношения между объектами, когда при создании нового объекта создаются все необходимые ему дополнительные объекты.
  • Наследование (Inheritance) - Когда класс наследуется от родительского класса, он приобретает все характеристики родительского класса.
  • Отношение HAS-A - Сокращенное описание "класс В содержит параметр с экземпляром(-ами) класса С".
  • Отношение IS-A - Сокращенное описание "класс С является наследником/расширением/реализацией класса/интерфейса В".

Функции, методы

Свойства

Прочее


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

Tip

Вот вы говорите "электронный документооборот". А вы знаете сколько из-за него ежегодно вырубают бинарных деревьев?

Описание структур данных


Алгоритмы

Tip

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

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

Поисковые алгоритмы

Алгоритмы работы с данными

Графы и деревья

Рекурсия (рекурсивные алгоритмы)

Динамическое программирование

Жадные алгоритмы (Greedy Algorithms) || Сжатие данных

Прочее


Архитектура, паттерны, модели

Tip

Всегда мало времени, чтобы разработать проект, но его всегда хватает, чтобы сделать в 2 раза больше багов.

Виды архитектур

Концепции проектирования

Архитектурные паттерны

Преобразование монолита

Паттерны микросервисов

Паттерны работы с БД

Паттерны проектирования

Паттерны GRASP

General Responsibility Assignment Software Patterns. Шаблоны проектирования, используемые для решения общих задач по назначению обязанностей классам и объектам. Описано девять GRAPS шаблонов. Паттерны не имеют выраженной структуры, четкой области применения и конкретной решаемой проблемы, а лишь представляют собой обобщенные подходы/рекомендации/принципы, используемые при проектировании дизайна системы. Это распределение ролей и ответственностей между всеми объектами, а также свойства, которыми эти объекты должны обладать для того, чтобы гармонично исполнять свои роли.

Паттерны GoF

Gangs Of Four (Банда четырех). В 1995 году Эрих Гамм, Ричард Хелм, Ральф Джонсон и Джон Влиссидес написали книгу "Design Patterns: Elements of Reusable Object-Oriented Software", в которой применили концепцию типовых паттернов в программировании. В книгу вошли 23 паттерна, решающие различные проблемы объектно-ориентированного дизайна.

Прочие паттерны


Протоколы и клиент-серверное взаимодействие

Tip

А ты не чувствуешь красоту мира?
Честно говоря, я сейчас чувствую только отсутствие http.


SQL, Базы данных

Tip

SQL-запрос заходит в бар, подходит к двум столам и спрашивает: "можно присоединиться?"

PostgreSQL

MongoDB

Redis

Elasticsearch


Брокеры сообщений

Tip

Люди, которые пишут всю свою мысль в одном большом сообщении, вы отбитые? Те кто по одному слову отправляет миллион сообщений - к вам вопросов нет.

RabbitMQ

Nats (Neural Autonomic Transport System)

Kafka


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

Tip

Работа программиста и шамана имеет много общего - оба бормочут непонятные слова, совершают непонятные действия и не могут объяснить, как оно работает.

JavaScript

TypeScript


Фреймворки

Tip

Тяжелые времена порождают сильных программистов. Сильные программисты создают фреймворки. Фреймворки порождают слабых программистов. Слабые программисты порождают тяжелые времена.

NestJs


Low-code

n8n


Нейросети

AI IDE Cursor


DevOps

Tip

Здравствуйте, это канал об аниме? Как мне пропатчить KDE2 под FreeBSD?

CI|CD


Мониторинги

Tip

Видишь суслика?
Нет...
А он есть... (c) к/ф "ДМБ"


Документирование

Tip

Джун: Где документация?
Тимлид: Я и есть документация.


Управление кодом

Tip

Не повторяйте одну и ту же ошибку в вашем коде снова и снова. Создайте функцию с ней и вызывайте её каждый раз, когда понадобится.


Управление персоналом

Tip

Один монитор - обычный программист, два монитора - продвинутый программист, три монитора - системный программист, четыре монитора - охранник.


Вопросы собеседований

Tip

Есть два способа написать сложную программу: либо сделать ее настолько простой, что будет казаться, что она проста как два плюс два, либо сделать ее настолько сложной, что невозможно найти ошибки

JavaScript

  1. Найти пересечение двух массивов
  2. Очистить массив от повторов
  3. Перевернуть строку
  4. Порядок выполнения - 1 (var)
  5. Порядок выполнения - 2 (Promise и setTimeout)
  6. Проверить, является ли строка зеркальной
  7. Проверить, является ли строка палиндромом
  8. Проверка порядка скобок
  9. Что выведет функция - 1 (let)
  10. Что выведет функция - 2 (let)

SQL

  1. Выборка дублирующихся записей

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published