34 KiB
Backend cheats
Данный репозиторий представляет собой наглядную шпаргалку по основным темам в области Backend-разработки. Весь материал разбит на темы и подтемы. Структура материала состоит из 3 частей:
- Визуальная часть - различные изображения/таблицы для лучшего понимания (может отсутствовать). Все рисунки и таблицы сделаны с нуля, специально для этого репозитория.
- Краткое описание - очень краткая выжимка информации, позволяющая понять лишь основную суть.
- Ссылки на источники - ресурсы, где можно найти полную информацию по конкретному вопросу. По возможности мы стараемся указывать максимально авторитетные источники, либо же те, которые предоставляют информацию максимально простым и понятным языком.
Изучать материал можно последовательно шаг за шагом.
🛠 Репозиторий находится в стадии активной разработки, поэтому постоянно обновляется и дополняется 🤝 Если вы хотите помочь проекту, не стесняйтесь присылать свои пулл реквесты 📝 The translation into English will be start after all the main topics have been completed
Содержание
Сеть и интернет
Интернет - это всемирная система объединяющая компьютерные сети со всего мира в единую сеть для хранения/передачи информации. Изначально Интернет разрабатывался для нужд военных. Но вскоре он стал внедряться в учреждения образования (университеты), а затем его смогли использовать частные компании, которые начали организовывать сети провайдеров, предоставляющие услуги доступа в Интернет обычным гражданам. К началу 2020 года количество пользователей в сети Интернет перевалило за 4.5 млрд человек.
-
Как устроен Интернет
Ваш компьютер никогда не был связан с Интернетом напрямую. Он видит только свою локальную сеть, в которую проводным (Ethernet) или беспроводным (Wi-Fi, Bluetooth) путем подключены другие устройства.
Для связи с Интернетом в вашей локальной сети находиться специальный мини-компьютер - маршрутизатор. Далее этот маршрутизатор связывает вас с интернет-провайдером, который в свою очередь связан с другими провайдерами более высокого уровня. Таким образом, ваше сообщение, пройдя транзитом через сеть нескольких провайдеров, достигнет сеть назначения.
Хост
(host - принимающий) - любое устройство, которое находится в какой-либо сети.
Сервер
(serve - обслуживать) - специальный компьютер в сети, который обслуживает запросы поступающие от других компьютеров.
Как работает Интернет - MDN (mozilla.org)
Основы программирования. Как работают сети? - YouTube
Хост — что это такое и как он работает
Что такое сервер и как он работает
-
Браузеры и как они работают
Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет.
Как работают браузеры — MDN (mozilla.org)
-
Что такое DNS
DNS (Domain Name System) - это децентрализованная система именования адресов в Интернете, которая позволяет создавать удобные для человека буквеные наименования (доменные имена) соответствующие числовым IP-адресам, которые используются компьютерами.
IP-адрес
- уникальный идентификатор устройства находящегося в какой-либо сети.
Система доменных имен DNS — YouTube
-
Что такое доменное имя
Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д.
Что такое доменные имена - MDN (mozilla.org)
-
Хостинг
Хостинг (hosting) - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений.
Хостинг: варианты, сравнения, пользовательская статистика — habr.com
Хостинг: что это, зачем и как выбрать – vc.ru
-
Cтек протоколов TCP/IP
Стек TCP/IP - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю.
Протокол
- это всего лишь набор правил, документ, фиксирующий договорённость. В частности в стеке TCP/IP протоколы описывают правила взаимодействия между уровнями / в пределах одного уровня.
На начальном этапе не стоит сильно погружаться в эту тему, но иметь общее представление, как ваши данные проходят через все уровни протоколов, будет полезно.
TCP
- это протокол обеспечивающий надежную передачу данных. TCP гарантирует доставку данных и сохранение порядка следования сообщений. Но это сказывается на скорости передачи. Данный протокол используется там, где потеря информации недопустима, например для отправки почты.
UDP
- это простой протокол с быстрой передачей данных. Он не использует механизмов для гарантирования доставки и порядка следования данных. Используется, например в онлайн-играх, где частичная потеря пакетов не критична, но скорость передачи данных имеет гораздо более важное значение. Так же, запросы к DNS-серверам происходят через UDP протокол.
MAC-адрес
- уникальный идентификатор, назначенный сетевому адаптеру какого либо-устройства.
Модель и стек протоколов TCP/IP — YouTube
Всё, что вы хотели знать о МАС адресе — habr.com
-
Проблемы сети
-
IPv4 и IPv6
IPv4 и IPv6 соответственно 4 и 6 версии IP-адреса. IPv4 разработана в 1981 году и ограничивает адресное пространство около 4.3 млрд (2^32) возможными уникальными адресами. Но со временем распределение адресного пространства стало происходить значительно более быстрыми темпами, что вынудило создание новой версии IP-адреса для хранения большего количества адресов. IPv6 способен обеспечить более 300 млн IP-адресов на каждого жителя Земли.
Протоколы IPv4 и IPv6. В чем разница и что лучше?
-
Трассировка маршрутов
Трассировка маршрута - процедура, позволяющая отследить по каким узлам, с какими IP адресами, передаётся отправленный вами пакет прежде чем он достигнет точки назначения. Трассировка может применяться для выявления связанных с работой компьютерной сети проблем, а также для исследования/анализа сети.
Трассировка сетевого маршрута — hackware.ru
Операционные системы
Операционная система (ОС) – это комплексная программная система, которая предназначена для управления ресурсами компьютера.
На данном этапе нет необходимости в детальном изучении устройства и принципов работы ОС. Достаточно лишь общего понимания, как в целом функционирует вся эта система, чтобы для вас это не было каким-то черным ящиком.
-
Как работают ОС
Что такое операционная система и как она работает – YouTube
Что такое операционная система и как она работает? - GitHub
-
Управление процессами
-
Потоки и параллелизм
Параллелизм против многопоточности против асинхронного программирования: разъяснение – habr.com
-
Управление памятью
-
Межпроцессорное взаимодействие
Межпроцессное взаимодействие – Википедия
IPC: основы межпроцессного взаимодействия
-
Ввод и вывод (I/O)
Основные методы ввода-вывода (I/O) – tproger.ru
-
Основы POSIX
Основы Linux
Операционные системы на базе ядра Linux это стандарт в мире серверной разработки, поскольку большинство серверов работают именно на таких ОС. Использовать Linux на серверах выгодно, ведь он рапространяется бесплатно.
Существует огромное количество дистрибутивов (сборок с набором предустановленного ПО) Linux на любой вкус и цвет. Одним из самых популярных является Ubuntu. Именно с него можно начать своё погружение в серверную разработку.
Установить Ubuntu можно на отдельный ПК или ноутбук. Если такой возможности нет, можно воспользоваться специальной программой Virtual Box, в которой можно запускать другие ОС поверх основной. Так же можно запустить Docker контейнер с образом Ubuntu (Docker - это отдельная тема, которая рассматривается в этом репозитории).
После этого можно быстро пройти вводный курс по Linux и Bash.
-
Работа с терминалом
Необходимо уметь работать с терминалом (консолью). Это предоставляет вам доступ ко всем возможностям ОС, в отличии от графического интерфейса, функционал которого существенного ограничен.
### РАБОТА С ФАЙЛОВОЙ СИСТЕМОЙ
ls # просмотр содержимого директории
cd <путь> # переход в указанный каталог
cd .. # переход на уровень выше (в родительский каталог)
touch <файл> # создание файла
cat > <файл> # ввод текста в файл из консоли (перезапись)
cat >> <файл> # ввод текста в конец файла (добавление)
cat/more/less <файл> # просмотр содержимого файла
head/tail <файл> # просмотр первых/последних строк файла
pwd # путь к текущей директории
mkdir <имя> # создать директорию
cp <файл> <путь> # копировать файл или директорию
mv # перемещение или переименование
rm <файл> # удаление файла или директории
chmod # изменения прав доступа к файлу
find # поиск в файловой системе
du # рамзер файла или каталога
### ДОКУМЕНТАЦИЯ
man <название_команды> # Позволяет посмотреть руководство по любой команде.
apropos <слово> # Поиск команды с описанием имеющим указанное слово
man -k <слово> # Аналогично команде выше
whatis <название_команды> # Краткое описание команды
### ПРАВА СУПЕРПОЛЬЗОВАТЕЛЯ
sudo <команда> # выполняет команду с правами суперпользователя
Основные linux-команды для новичка – habr.com
44 команды Linux которые вы должны знать – losst.ru
-
Менеджер пакетов
Встроенный менеджер пакетов APT позволяет устанавливать новые программы из сети с помощью терминала.
apt install <имя_пакета> # установить пакет
apt remove <имя_пакета> # удалить пакет, но оставить конфигурацию
apt purge <имя_пакета> # удалить пакет вместе с конфигурацией
apt update # обновление информации о новых версиях пакетов
apt upgrade # обновление пакетов, установленных в системе
apt list --installed # список установленных в системе пакетов
apt list --upgradable # список пакетов, которые требуют обновления
apt search <имя> # поиск пакетов по имени в сети
apt show <имя_пакета> # информация о пакете
Как пользоваться apt – losst.ru
Использование APT. Команды apt и apt-get – pingvinus.ru
-
Скрипты Bash
С помощью скриптов (сценариев) можно автоматизировать последовательный ввод любого количества команд. В Bash можно создавать различные условия (разветвления), циклы, таймеры и т.д. для выполнения всевозможных действий связанных с вводом в консоль.
Шпаргалка оп Bash – quickref.me
Шпаргалка оп Bash – learnxinyminutes.com
-
Пользователи
-
Файловая система
-
Работа с процессами
ps # вывести 'снимок' процессов всех пользователей
top # диспетчер задач в реальном времени
<команда> & # запуск процесса в фоновом режиме, то есть не занимая консоль
jobs # список запущенных в фоновом режиме процессов
fg <номер> # вернуть процесс обратно в активный режим по его номеру
bg <номер> # запуск остановленного процесса в фоновый режим
kill <id процесса> # завершить процесс по id
killall <программа> # завершить все процессы связанные с одной программой
Работа с процессами в Linux – YouTube
-
Работа с SSH
Служба SSH позволяет получить удаленный доступ к терминалу другого компьютера. В случае с персональным компьютером, это может понадобиться для срочного решения какой-либо проблемы, а в случае с сервером это вообще очень распространенная практика.
# ОСНОВНЫЕ КОМАНДЫ
apt install openssh-server # установка SSH (хотя он почти везде идёт из коробки)
service ssh start # запуск SSH
service ssh stop # выключение SSH
ssh -p <Порт> user@remotehost # подключенние к удаленному ПК через SSH
ssh-keygen -t rsa # генерация RSA-ключа для беспарольного входа
ssh-copy-id -i ~/.ssh/id_rsa user@remotehost # копирования ключа на удаленную машину
Как пользоваться SSH – losst.ru
-
Планировщик задач
-
Системные логи
-
Проблемы Linux
Общие знания
-
Структуры данных
-
Хэш-таблицы
-
Очередь и стек
-
Связанные списки
-
Двусвязные списки
-
-
Форматы хранения данных
-
Текстовые
JSON, YAML, XML
-
Бинарные
Message Pack, BSON, ProtoBuf
-
-
Криптография
-
Хэши и хеш-функции
-
Цифровые подписи
-
Соль для подписей
-
Коллизия хэшей
-
Язык программирования
Выберите для изучения один из языков (спсиок составлен по моему личному мнению):
-
Базовые знания
-
Примитивные типы данных
-
Функции
-
Набор, массив, хеш-таблица, кортеж
-
Объекты/классы/структуры, прототипы/интерфейсы/миксины
-
Ссылки, указатели
-
Область видимости переменных
-
Сборщик мусора
-
Преобразование типов
-
Слабая/сильная типизация в коде
-
Битовые операции
-
Обработка ошибок
-
-
Распараллеливание
-
Процессы
-
Потоки
-
КоРутины
-
Проблемы распараллеливания
-
Атомарные операции
-
Блокировки
-
-
Пакетный менеджер
-
Отладчик
-
Запуск 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
- bzick/oh-my-backend: Backend Roadmap (from Junior to Senior)
- zhashkevych/awesome-backend: 🚀 A curated and opinionated list of resources (English & Russian) for Backend developers
- УЧЕБНЫЙ КУРС: Компьютерные сети