46 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 - обслуживать) - специальный компьютер в сети, который обслуживает запросы поступающие от других компьютеров.
-
-
Браузеры и как они работают
- Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет.
- Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет.
-
Что такое DNS
-
DNS (Domain Name System) - это децентрализованная система именования адресов в Интернете, которая позволяет создавать удобные для человека буквеные наименования (доменные имена) соответствующие числовым IP-адресам, которые используются компьютерами.
-
IP-адрес - уникальный идентификатор устройства находящегося в какой-либо сети.
-
-
Что такое доменное имя
- Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д.
- Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д.
-
Хостинг
- Хостинг (hosting) - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений.
- Хостинг (hosting) - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений.
-
Cтек протоколов TCP/IP
- Стек TCP/IP - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю.
На начальном этапе не стоит сильно погружаться в эту тему, но иметь общее представление, как ваши данные проходят через все уровни протоколов, будет полезно.
- TCP - это протокол обеспечивающий надежную передачу данных. TCP гарантирует доставку данных и сохранение порядка следования сообщений. Но это сказывается на скорости передачи. Данный протокол используется там, где потеря информации недопустима, например для отправки почты.
-
UDP - это простой протокол с быстрой передачей данных. Он не использует механизмов для гарантирования доставки и порядка следования данных. Используется, например в онлайн-играх, где частичная потеря пакетов не критична, но скорость передачи данных имеет гораздо более важное значение. Так же, запросы к DNS-серверам происходят через UDP протокол.
-
MAC-адрес - уникальный идентификатор, назначенный сетевому адаптеру какого-либо устройства.
- Стек TCP/IP - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю.
-
Проблемы сети
Качество работы сетей, и тем более интернета, далеко от идеала. Это обусловлено сложной и рассредоточенной, по разным устройствам, структурой сети. Поэтому на функционирование сети влияет огромное количеств факторов. Например: стабильность соединения между устройством клиента и его роутером, качество услуг провайдера, мощность и производительность сервера, физическое расстояние между клиентом и сервером и т.д.
-
IPv4 и IPv6
IPv4 и IPv6 соответственно 4 и 6 версии IP-адреса. IPv4 разработана в 1981 году и ограничивает адресное пространство около 4.3 млрд (2^32) возможными уникальными адресами. Но со временем распределение адресного пространства стало происходить значительно более быстрыми темпами, что вынудило создание новой версии IP-адреса для хранения большего количества адресов. IPv6 способен обеспечить более 300 млн IP-адресов на каждого жителя Земли.
-
Трассировка маршрутов
Трассировка маршрута - процедура, позволяющая отследить по каким узлам, с какими IP адресами, передаётся отправленный вами пакет прежде чем он достигнет точки назначения. Трассировка может применяться для выявления связанных с работой компьютерной сети проблем, а также для исследования/анализа сети.
Операционные системы
Операционная система (ОС) – это комплексная программная система, которая предназначена для эффективного распределения вычислительных ресурсов компьютера. Благодаря операционным системам пользователи могут без всякого труда использовать компьютеры для решения различных задач. То есть людям не приходится иметь дело непосредственно с процессором, оперативной памятью или другими комплектующими ПК.
На данном этапе нет необходимости в детальном изучении устройства и принципов работы ОС. Достаточно лишь общего понимания, как в целом функционирует вся эта система, чтобы для вас это не было каким-то чёрным ящиком.
-
Как работают ОС
Что такое операционная система и как она работает – 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 <имя> # создать директорию
rmdir <имя> # удалить директорию
cp <файл> <путь> # копировать файл или директорию
mv <файл> <путь># перемещение или переименование
rm <файл> # удаление файла или директории
find <строка># поиск в файловой системе
du <файл># вывод размера файла или каталога
### КОМАНДЫ ДОКУМЕНТАЦИИ
man <название_команды> # позволяет посмотреть руководство по любой команде.
apropos <слово> # поиск команды с описанием имеющим указанное слово
man -k <слово> # аналогично команде выше
whatis <название_команды> # краткое описание команды
### ПРАВА СУПЕРПОЛЬЗОВАТЕЛЯ
sudo <команда> # выполняет команду с правами суперпользователя
Основные linux-команды для новичка – habr.com
44 команды Linux которые вы должны знать – losst.ru
Ubuntu cheatsheet – GitHub
-
Менеджер пакетов
Встроенный менеджер пакетов apt (advanced packaging tool) позволяет устанавливать/обновлять программные пакеты из сети с помощью терминала.
### ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С 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-скрипты: начало – habr.com
Шпаргалка оп Bash – quickref.me
-
Пользователи
ОС на базе Linux являются многопользовательскими. Это означает, что много людей могут одновременно запускать множество различных приложений одновременно на одном и том же компьютере. Чтобы система Linux смогла «узнать» пользователя, он должен войти в систему, соответсвенно каждый пользователь должен иметь уникальное имя и секретный пароль.
### РАБОТА С ПОЛЬЗОВАТЕЛЯМИ
useradd <имя> [ключи] # создать нового пользователя
passwd <имя> # установить пароль пользователю
usermod <имя> [ключи] # редактировать пользователя
usermod -L <имя> # заблокировать пользователя
usermod -U <имя> # разблокировать пользователя
userdel <имя> [ключи] # удалить пользователя
### РАБОТА С ГРУППАМИ
groupadd <группа> [ключи] # создать группу
groupmod <группа> [опции] # редактировать группу
groupdel <группа> [опции] # удалить группу
usermod -a -G <группы(через запятую)> <пользователь> # добивить пользователя в группы
gpasswd --delete <пользователь> <группы(через запятую)> # удалить пользователя из групп
### СИСТЕМНЫЕ ФАЙЛЫ
/etc/passwd # файл паролей, содержащий основную информацию о пользователях
/etc/shadow # файл теневых шифрованных паролей, содержащий зашифрованные пароли
/etc/group # файл групп, содержащий основную информацию о группах
/etc/gshadow # файл теневых групп, содержащий шифрованные пароли групп
Пользователи в Linux – добавление, изменение, удаление
Группы и пользователи в Linux
-
Права доступа
Так как под одной ОС могут работать несколько разных пользователи, то соответственно у каждого такого пользователя будет своё личное файловое пространство. Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты – права на доступ. Эти атрибуты должны сообщать, кто имеет право работать c тем или иным файлом.
Права доступа в Linux – younglinux.info
Управление доступом в Linux
Команда chmod – изменение прав доступа – younglinux.info
-
Работа с процессами
Процессы в Linux можно описать как контейнеры, в которых хранится вся информация о состоянии выполняемой программы. Если программа работает хорошо, то все нормально, но если она зависла и вам нужно восстановить её работу, тогда вам понадобиться навыки работы по управлению процессами.
### ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С ПРОЦЕССАМИ
ps # вывести 'снимок' процессов всех пользователей
top # диспетчер задач в реальном времени
<команда> & # запуск процесса в фоновом режиме, то есть не занимая консоль
jobs # список запущенных в фоновом режиме процессов
fg <номер> # вернуть процесс обратно в активный режим по его номеру
bg <номер> # запуск остановленного процесса в фоновый режим
kill <id процесса> # завершить процесс по id
killall <программа> # завершить все процессы связанные с одной программой
Работа с процессами в Linux – YouTube
Шпаргалка по работе процессами в Lunux – dmosk.ru
-
Работа с SSH
Служба 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 # копирования ключа на удаленную машину
-
Планировщик задач
Благодаря планировщикам можно гибко управлять отложенным запуском команд и скриптов. В Linux есть встроенный планировщик cron, с помощью которого можно легко выполнять необходимые действия через определенные интервалы времени.
Использование Cron для автоматизации задач – Digital Ocean
Crontab: запуск задач по расписанию – YouTube
Удобный онлайн-редактор для crontab
-
Системные логи
Логи — это специальные текстовые файлы, в которые заносится вся информация о работе сервера или компьютера, о действиях программы или пользователя. Поэтому они особенно полезны при возникновении багов и ошибок в работе программы или сервера. Рекомендуется периодически просматривать логи, даже если ничего подозрительного не происходит.
Как посмотреть логи в Linux – losst.ru
Лог файлы Linux по порядку – habr.com
Туториал по системным логам Linux
-
Проблемы Linux
Общие знания
-
Системы счисления
-
Структуры данных
-
Хэш-таблицы
-
Очередь и стек
-
Связанные списки
-
Двусвязные списки
-
-
Форматы хранения данных
-
Текстовые
JSON, YAML, XML
-
Бинарные
Message Pack, BSON, ProtoBuf
-
-
Криптография
-
Хэши и хеш-функции
-
Цифровые подписи
-
Соль для подписей
-
Коллизия хэшей
-
Язык программирования
На этом этапе Вам предстоит выбрать для изучения один из языков программирования. В открытом доступе полно информации по различным языкам, поэтому с обучением у Вас не должно возникнуть проблем.
Многие бояться, что могут выбрать плохой или невостребованный язык программирования. Из-за чего начинают искать много ненужной информации по таким вопросам: "Какой язык лучше?", "Какой самый популярный?" и т.д. Это приводит к перепрыгиванию с одного языка на другой. Этого делать не нужно, поскольку не важно какой язык вы выберете в начале своего пути. Все языки, плюс минус, основываются на одинаковых принципах. Изучив досконально один из языков вам не составит труда использовать новый, потратив лишь немного времени на изучение синтаксиса и некоторых специфических особенностей. Примите к сведению, что язык программирования - это всего лишь инструмент. Изобилие языков обосновано тем, что каждый язык программирования, как правило, создаётся для решения определённых задач и в чём-то может уступать остальным. Поэтому в будущем, по мере вашего роста, вам всё ровно придётся столкнуться с использованием разных языков.
Тем не менее, ниже приведен список конкретных языков, которые лично по моему мнению хорошо подходят для backend-разработки.
-
Python - очень популярный и широко используемый. Лёгкий в изучении, благодаря простому синтаксису.
-
JavaScript - не менее популярный и практический единственный язык для полноценной Web-разработки. Благодаря платформе Node.js последнее несколько лет набирает популярность и в области backend-разработки.
-
Go - язык созданный внутри компании Google. Создавался специально для серверной разработки. Минималистичный, но в то же время обладающий очень богатой стандартной библиотекой.
-
Базовые знания
-
Примитивные типы данных
-
Функции
-
Набор, массив, хеш-таблица, кортеж
-
Объекты/классы/структуры, прототипы/интерфейсы/миксины
-
Ссылки, указатели
-
Область видимости переменных
-
Сборщик мусора
-
Преобразование типов
-
Слабая/сильная типизация в коде
-
Битовые операции
-
Обработка ошибок
-
-
Распараллеливание
-
Процессы
-
Потоки
-
КоРутины
-
Проблемы распараллеливания
-
Атомарные операции
-
Блокировки
-
-
Пакетный менеджер
-
Отладчик
-
Запуск 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
- УЧЕБНЫЙ КУРС: Компьютерные сети