# Backend cheats Данный репозиторий представляет собой наглядную шпаргалку по основным темам в области Backend-разработки. Весь материал разбит на темы и подтемы. Структура материала состоит из 3 частей: - **Визуальная часть** - различные изображения/таблицы для лучшего понимания (может отсутствовать). Все рисунки и таблицы сделаны с нуля, специально для этого репозитория. - **Краткое описание** - очень краткая выжимка информации, позволяющая понять лишь основную суть. - **Ссылки на источники** - ресурсы, где можно найти полную информацию по конкретному вопросу. По возможности мы стараемся указывать максимально авторитетные источники, либо же те, которые предоставляют информацию максимально простым и понятным языком. Изучать материал можно последовательно шаг за шагом. > 🛠 Репозиторий находится в стадии активной разработки, поэтому постоянно обновляется и дополняется.

## Содержание - [1. Сеть и интернет](#сеть-и-интернет) - [Как устроен интернет](#как-устроен-интернет) - [Браузеры и как они работают](#браузеры-и-как-они-работают) - [Что такое DNS](#что-такое-dns) - [Что такое доменное имя](#что-такое-доменное-имя) - [Хостинг](#хостинг) - [Cтек протоколов TCP/IP](#cтек-протоколов-tcpip) - [Проблемы сети](#проблемы-сети) - [IPv4 и IPv6](#ipv4-и-ipv6) - [Трассировка маршрутов](#трассировка-маршрутов) - [2. Операционные системы](#операционные-системы) - [Как работают ОС](#как-работают-ос) - [Управление процессами](#управление-процессами) - [Потоки и параллелизм](#потоки-и-параллелизм) - [Управление памятью](#управление-памятью) - [Межпроцессорное взаимодействие](#межпроцессорное-взаимодействие) - [Ввод и вывод (I/O)](#ввод-и-вывод-io) - [Основы POSIX](#основы-posix) - [Концепции построения сети](#концепции-построения-сети) ## Сеть и интернет **Интернет** - это всемирная система объединяющая компьютерные сети со всего мира в единую сеть для хранения/передачи информации. Изначально Интернет разрабатывался для нужд военных. Но вскоре он стал внедряться в учреждения образования (университеты), а затем его смогли использовать частные компании, которые начали организовывать сети провайдеров, предоставляющие услуги доступа в Интернет обычным гражданам. К началу 2020 года количество пользователей в сети Интернет перевалило за 4.5 млрд человек. [Интернет — Википедия](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82) [История Интернета — Википедия](https://ru.wikipedia.org/wiki/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0) - ### Как устроен Интернет

Internet

Ваш компьютер никогда не был связан с Интернетом напрямую. Он видит только свою локальную сеть, в которую проводным (Ethernet) или беспроводным (Wi-Fi, Bluetooth) путем подключены другие устройства. Для связи с Интернетом в вашей локальной сети находиться специальный мини-компьютер - **маршрутизатор**. Далее этот маршрутизатор связывает вас с интернет-провайдером, который в свою очередь связан с другими провайдерами более высокого уровня. Таким образом, ваше сообщение, пройдя транзитом через сеть нескольких провайдеров, достигнет сеть назначения. `Хост` _(host - принимающий)_ - любое устройство, которое находится в какой-либо сети. `Сервер` _(serve - обслуживать)_ - специальный компьютер в сети, который обслуживает запросы поступающие от других компьютеров. [Как работает Интернет - MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Learn/Common_questions/How_does_the_Internet_work) [Основы программирования. Как работают сети? - YouTube](https://www.youtube.com/watch?v=k_0BAtyaDio&ab_channel=Winderton) [Хост — что это такое и как он работает](https://anisim.org/articles/host/) [Сервер — Википедия]() [Что такое сервер и как он работает](https://timeweb.com/ru/community/articles/chto-takoe-server-i-kak-on-rabotaet)
Содержание ⬆️
- ### Браузеры и как они работают

Browser

Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет. [Как работают браузеры — MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Web/Performance/How_browsers_work) [Браузер — Википедия](https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80)
Содержание ⬆️
- ### Что такое DNS

DNS

**DNS (Domain Name System)** - это децентрализованная система именования адресов в Интернете, которая позволяет создавать удобные для человека буквеные наименования (доменные имена) соответствующие числовым IP-адресам, которые используются компьютерами. `IP-адрес` - уникальный идентификатор устройства находящегося в какой-либо сети. [Система доменных имен DNS — YouTube](https://www.youtube.com/watch?v=B0J0c0KLtbQ&ab_channel=AndreySozykin) [DNS — Википедия)](https://ru.wikipedia.org/wiki/DNS) [IP адрес — HackWare.ru](https://hackware.ru/?p=11589) [IP-адрес — Википедия](https://ru.wikipedia.org/wiki/IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81)
Содержание ⬆️
- ### Что такое доменное имя

Domain

Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д. [Что такое доменные имена - MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Learn/Common_questions/What_is_a_domain_name) [Как работают домены](https://temoto.github.io/a/kak-rabotayut-domeny.html)
Содержание ⬆️
- ### Хостинг

Hosting

**Хостинг** _(hosting)_ - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений. [Хостинг: варианты, сравнения, пользовательская статистика — habr.com](https://habr.com/ru/company/ruvds/blog/443522/) [Хостинг: что это, зачем и как выбрать](https://vc.ru/services/74241-hosting-chto-eto-zachem-i-kak-vybrat)
Содержание ⬆️
- ### Cтек протоколов TCP/IP

TCP/IP

**Стек TCP/IP** - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю. `Протокол` - это всего лишь набор правил, документ, фиксирующий договорённость. В частности в стеке TCP/IP протоколы описывают правила взаимодействия между уровнями / в пределах одного уровня. > На начальном этапе не стоит сильно погружаться в эту тему, но иметь общее представление, как ваши данные проходят через все уровни протоколов, будет полезно.

TCP

`TCP` - это протокол обеспечивающий надежную передачу данных. TCP гарантирует доставку данных и сохранение порядка следования сообщений. Но это сказывается на скорости передачи. Данный протокол используется там, где потеря информации недопустима, например для отправки почты.

UDP

`UDP` - это простой протокол с быстрой передачей данных. Он не использует механизмов для гарантирования доставки и порядка следования данных. Используется, например в онлайн-играх, где частичная потеря пакетов не критична, но скорость передачи данных имеет гораздо более важное значение. Так же, запросы к DNS-серверам происходят через UDP протокол. `MAC-адрес` - уникальный идентификатор, назначенный сетевому адаптеру какого либо-устройства. [Модель и стек протоколов TCP/IP — YouTube](https://www.youtube.com/watch?v=UZo4ffQ-aAc&list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1&index=8&ab_channel=AndreySozykin) [Протокол TCP — YouTube](https://www.youtube.com/watch?v=CKUOb4htnB4&ab_channel=AndreySozykin) [Протокол UDP — YouTube](https://www.youtube.com/watch?v=GBrLfZvRrd8&ab_channel=AndreySozykin) [TCP/IP — Википедия (wikipedia.org)](https://ru.wikipedia.org/wiki/TCP/IP) [Всё, что вы хотели знать о МАС адресе — habr.com](https://habr.com/ru/post/483670/)
Содержание ⬆️
- ### Проблемы сети
Содержание ⬆️
- ### IPv4 и IPv6

IPv4-IPv6

IPv4 и IPv6 соответственно 4 и 6 версии IP-адреса. IPv4 разработана в 1981 году и ограничивает адресное пространство около 4.3 млрд (2^32) возможными уникальными адресами. Но со временем распределение адресного пространства стало происходить значительно более быстрыми темпами, что вынудило создание новой версии IP-адреса для хранения большего количества адресов. IPv6 способен обеспечить более 300 млн IP-адресов на каждого жителя Земли. [IPv4 — Википедия](https://ru.wikipedia.org/wiki/IPv4) [IPv6 — Википедия](https://ru.wikipedia.org/wiki/IPv6) [Протоколы IPv4 и IPv6. В чем разница и что лучше? – bezopasnik.info](https://bezopasnik.info/%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B-ipv4-%D0%B8-ipv6-%D0%B2-%D1%87%D0%B5%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%B8-%D1%87%D1%82%D0%BE-%D0%BB%D1%83%D1%87%D1%88%D0%B5/)
Содержание ⬆️
- ### Трассировка маршрутов

Traceroute

**Трассировка маршрута** - процедура, позволяющая отследить по каким узлам, с какими IP адресами, передаётся отправленный вами пакет прежде чем он достигнет точки назначения. Трассировка может применяться для выявления связанных с работой компьютерной сети проблем, а также для исследования/анализа сети. [Трассировка сетевого маршрута — hackware.ru](https://hackware.ru/?p=9210#12) [Traceroute — Википедия](https://ru.wikipedia.org/wiki/Traceroute)
Содержание ⬆️
## Операционные системы - ### Как работают ОС [Что такое операционная система и как она работает – YouTube](https://www.youtube.com/watch?v=hb9CTGSJm88&t) [Что такое операционная система и как она работает? - GitHub](https://github.com/Steindvart/My_study/blob/master/docs/source/OS/articles/what_is_os.rst)
Содержание ⬆️
- ### Управление процессами [Процесс (Операционные Системы) – bmstu.wiki]()
Содержание ⬆️
- ### Потоки и параллелизм
Содержание ⬆️
- ### Управление памятью
Содержание ⬆️
- ### Межпроцессорное взаимодействие
Содержание ⬆️
- ### Ввод и вывод (I/O)
Содержание ⬆️
- ### Основы POSIX
Содержание ⬆️
- ### Концепции построения сети
Содержание ⬆️
## Основы Linux Операционные системы на базе ядра Linux это стандарт в мире серверной разработки, поскольку большинство серверов работают именно на таких ОС. Использовать Linux на серверах выгодно, ведь он рапространяется бесплатно. Существует огромное количество дистрибутивов (сборок с набором предустановленного ПО) Linux на любой вкус и цвет. Одним из самых популярных является Ubuntu. Именно с него можно начать своё погружение в серверную разработку. [Установить Ubuntu](https://ubuntu.com/download/desktop) можно на отдельный ПК или ноутбук. Если такой возможности нет, можно воспользоваться специальной программой [Virtual Box](https://www.virtualbox.org/wiki/Downloads), в которой можно [запускать другие ОС](https://lumpics.ru/how-install-ubuntu-on-virtualbox-virtual-machine/) поверх основной. Так же можно запустить [Docker](https://www.docker.com/products/docker-desktop) [контейнер с образом Ubuntu](https://losst.ru/zapusk-kontejnera-docker) (Docker - это отдельная тема, которая рассматривается в этом репозитории). После этого можно быстро пройти [вводный курс по Linux и Bash](https://younglinux.info/bash/linux). - ### Работа с терминалом Необходимо уметь работать с терминалом (консолью). Это предоставляет вам доступ ко всем возможностям ОС, в отличии от графического интерфейса, функционал которого существенного ограничен. ```bash ### РАБОТА С ФАЙЛОВОЙ СИСТЕМОЙ ls # просмотр содержимого директории cd # переход в указанный каталог cd .. # переход на уровень выше (в родительский каталог) touch # создание файла cat > # ввод текста в файл из консоли (перезапись) cat >> # ввод текста в конец файла (добавление) cat/more/less # просмотр содержимого файла head/tail # просмотр первых/последних строк файла pwd # путь к текущей директории mkdir # создать директорию cp # копировать файл или директорию mv # перемещение или переименование rm # удаление файла или директории chmod # изменения прав доступа к файлу find # поиск в файловой системе du # рамзер файла или каталога ### MANUAL man <название_команды> # Позволяет посмотреть руководство по любой команде. apropos <слово> # Поиск команды с описанием имеющим указанное слово man -k <слово> # Аналогично команде выше whatis <название_команды> # Краткое описание команды ### ПРАВА СУПЕРПОЛЬЗОВАТЕЛЯ sudo <команда> # выполняет команду с правами суперпользователя ``` [Основные linux-команды для новичка – habr.com](https://habr.com/ru/post/501442/) [44 команды Linux которые вы должны знать – losst.ru](https://losst.ru/42-komandy-linux-kotorye-vy-dolzhny-znat) [Ubuntu cheatsheet – GitHub](https://github.com/JREAM/ubuntu-cheatsheet/blob/master/README.md) - ### Менеджер пакетов Встроенный менеджер пакетов APT позволяет устанавливать новые программы из сети с помощью терминала. ```bash apt install <пакет> # установить пакет apt remove <пакет> # удалить пакет, но оставить конфигурацию apt purge <пакет> # удалить пакет вместе с конфигурацией apt update # обновление информации о новых версиях пакетов apt upgrade # обновление пакетов, установленных в системе apt list --installed # список установленных в системе пакетов apt list --upgradable # список пакетов, которые требуют обновления apt search <имя> # поиск пакетов по имени в сети apt show <пакет> # информация о пакете ``` [Как пользоваться apt – losst.ru](https://losst.ru/kak-polzovatsya-apt) [Использование APT. Команды apt и apt-get – pingvinus.ru](https://pingvinus.ru/note/apt) - ### Скрипты Bash С помощью скриптов (сценариев) можно автоматизировать последовательный ввод любого количества команд. В Bash можно создавать различные условия (разветвления), циклы, таймеры и т.д. для выполнения всевозможных действий связанных с вводом в консоль. [Шпаргалка оп Bash – quickref.me](https://quickref.me/bash) [Шпаргалка оп Bash – learnxinyminutes.com](https://learnxinyminutes.com/docs/ru-ru/bash-ru/) - ### Пользователи - ### Файловая система - ### Работа с процессами ```bash ps # вывести 'снимок' процессов всех пользователей top # диспетчер задач в реальном времени <команда> & # запуск процесса в фоновом режиме, то есть не занимая консоль jobs # список запущенных в фоновом режиме процессов fg <номер> # вернуть процесс обратно в активный режим по его номеру bg <номер> # запуск остановленного процесса в фоновый режим kill # завершить процесс по id killall <программа> # завершить все процессы связанные с одной программой ``` [Работа с процессами в Linux – YouTube](https://www.youtube.com/watch?v=Y4W_rJStNSA) - ### Работа с SSH - ### Планировщик задач - ### Системные логи - ### Проблемы Linux ## Общие знания - ### Структуры данных - #### Хэш-таблицы - #### Очередь и стек - #### Связанные списки - #### Двусвязные списки - ### Форматы хранения данных - #### Текстовые JSON, YAML, XML - #### Бинарные Message Pack, BSON, ProtoBuf - ### Криптография - #### Хэши и хеш-функции - #### Цифровые подписи - #### Соль для подписей - #### Коллизия хэшей ## Язык программирования Выберите для изучения один из языков _(спсиок составлен по моему личному мнению)_: - [Go](https://github.com/avelino/awesome-go) - [JavaScript (Node.js)](https://github.com/sindresorhus/awesome-nodejs) - [Python](https://github.com/vinta/awesome-python) * ### Базовые знания - #### Примитивные типы данных - #### Функции - #### Набор, массив, хеш-таблица, кортеж - #### Объекты/классы/структуры, прототипы/интерфейсы/миксины - #### Ссылки, указатели - #### Область видимости переменных - #### Сборщик мусора - #### Преобразование типов - #### Слабая/сильная типизация в коде - #### Битовые операции - #### Обработка ошибок * ### Распараллеливание - #### Процессы - #### Потоки - #### КоРутины - #### Проблемы распараллеливания - #### Атомарные операции - #### Блокировки * ### Пакетный менеджер * ### Отладчик * ### Запуск HTTP-сервера * ### Кэширование * ### Шаблонизация * ### Ввод / Вывод (IO) ## Протокол HTTP - ### Формат протокола - ### Методы HTTP-запросов - ### Коды ответов - ### Заголовки - ### Cookie - ### CORS - ### CSP - ### Безопасность (HTTPS) - ### Различия HTTP 1.0 и HTTP 1.1 - ### HTTP 2 - ### HTTP 3 - ### Откладка сети в Chrome Dev Tools - ### Работа с HTTP через терминал - ### WebSockets - ### API форматы - ### Web сервера - #### NGNX - #### Apache httpd ## Базовое ПО - ### Система контроля версий Git - ### Контейнеризация и Docker - ### Postman / Insomnia ## Базы данных - ### Реляционные базы данных - ### Документоориентированные базы данных - ### Redis - ### Проблемы баз данных ## Дополнительные материалы и источники - [Backend Developer Roadmap: Learn to become a modern backend developer](https://roadmap.sh/backend) - [bzick/oh-my-backend: Backend Roadmap (from Junior to Senior)](https://github.com/bzick/oh-my-backend) - [zhashkevych/awesome-backend: 🚀 A curated and opinionated list of resources (English & Russian) for Backend developers](https://github.com/zhashkevych/awesome-backend) - [УЧЕБНЫЙ КУРС: Компьютерные сети](https://www.asozykin.ru/courses/networks_online)
Made with ♥
LICENSE 2022.