backend-cheats/README.md
2022-03-08 20:47:27 +03:00

34 KiB
Raw Blame History

Backend cheats

Данный репозиторий представляет собой наглядную шпаргалку по основным темам в области Backend-разработки. Весь материал разбит на темы и подтемы. Структура материала состоит из 3 частей:

  • Визуальная часть - различные изображения/таблицы для лучшего понимания (может отсутствовать). Все рисунки и таблицы сделаны с нуля, специально для этого репозитория.
  • Краткое описание - очень краткая выжимка информации, позволяющая понять лишь основную суть.
  • Ссылки на источники - ресурсы, где можно найти полную информацию по конкретному вопросу. По возможности мы стараемся указывать максимально авторитетные источники, либо же те, которые предоставляют информацию максимально простым и понятным языком.

Изучать материал можно последовательно шаг за шагом.

🛠 Репозиторий находится в стадии активной разработки, поэтому постоянно обновляется и дополняется 🤝 Если вы хотите помочь проекту, не стесняйтесь присылать свои пулл реквесты 📝 The translation into English will be start after all the main topics have been completed

Содержание

Сеть и интернет

Интернет - это всемирная система объединяющая компьютерные сети со всего мира в единую сеть для хранения/передачи информации. Изначально Интернет разрабатывался для нужд военных. Но вскоре он стал внедряться в учреждения образования (университеты), а затем его смогли использовать частные компании, которые начали организовывать сети провайдеров, предоставляющие услуги доступа в Интернет обычным гражданам. К началу 2020 года количество пользователей в сети Интернет перевалило за 4.5 млрд человек.

Интернет — Википедия

История Интернета — Википедия

  • Как устроен Интернет

Internet

Ваш компьютер никогда не был связан с Интернетом напрямую. Он видит только свою локальную сеть, в которую проводным (Ethernet) или беспроводным (Wi-Fi, Bluetooth) путем подключены другие устройства.

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

Хост (host - принимающий) - любое устройство, которое находится в какой-либо сети.

Сервер (serve - обслуживать) - специальный компьютер в сети, который обслуживает запросы поступающие от других компьютеров.

Как работает Интернет - MDN (mozilla.org)

Основы программирования. Как работают сети? - YouTube

Хост — что это такое и как он работает

Сервер — Википедия

Что такое сервер и как он работает

  • Браузеры и как они работают

Browser

Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет.

Как работают браузеры — MDN (mozilla.org)

Браузер — Википедия

  • Что такое DNS

DNS

DNS (Domain Name System) - это децентрализованная система именования адресов в Интернете, которая позволяет создавать удобные для человека буквеные наименования (доменные имена) соответствующие числовым IP-адресам, которые используются компьютерами.

IP-адрес - уникальный идентификатор устройства находящегося в какой-либо сети.

Система доменных имен DNS — YouTube

DNS — Википедия

IP адрес — HackWare.ru

IP-адрес — Википедия

  • Что такое доменное имя

Domain

Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д.

Что такое доменные имена - MDN (mozilla.org)

Как работают домены

  • Хостинг

Hosting

Хостинг (hosting) - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений.

Хостинг: варианты, сравнения, пользовательская статистика — habr.com

Хостинг: что это, зачем и как выбрать vc.ru

  • ек протоколов TCP/IP

TCP/IP

Стек TCP/IP - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю.

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

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

TCP

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

UDP

UDP - это простой протокол с быстрой передачей данных. Он не использует механизмов для гарантирования доставки и порядка следования данных. Используется, например в онлайн-играх, где частичная потеря пакетов не критична, но скорость передачи данных имеет гораздо более важное значение. Так же, запросы к DNS-серверам происходят через UDP протокол.

MAC-адрес - уникальный идентификатор, назначенный сетевому адаптеру какого либо-устройства.

Модель и стек протоколов TCP/IP — YouTube

Протокол TCP — YouTube

Протокол UDP — YouTube

TCP/IP — Википедия

Всё, что вы хотели знать о МАС адресе — habr.com

  • Проблемы сети

  • IPv4 и IPv6

IPv4-IPv6

IPv4 и IPv6 соответственно 4 и 6 версии IP-адреса. IPv4 разработана в 1981 году и ограничивает адресное пространство около 4.3 млрд (2^32) возможными уникальными адресами. Но со временем распределение адресного пространства стало происходить значительно более быстрыми темпами, что вынудило создание новой версии IP-адреса для хранения большего количества адресов. IPv6 способен обеспечить более 300 млн IP-адресов на каждого жителя Земли.

IPv4 — Википедия

IPv6 — Википедия

Протоколы IPv4 и IPv6. В чем разница и что лучше?

  • Трассировка маршрутов

Traceroute

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

Трассировка сетевого маршрута — hackware.ru

Traceroute — Википедия

Операционные системы

Операционная система (ОС) это комплексная программная система, которая предназначена для управления ресурсами компьютера.

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

  • Как работают ОС

Что такое операционная система и как она работает YouTube

Что такое операционная система и как она работает? - GitHub

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

Процесс Википедия

Процессы и потоки

  • Потоки и параллелизм

Поток выполнения Википедия

Параллелизм против многопоточности против асинхронного программирования: разъяснение habr.com

  • Управление памятью

Управление памятью в ОС

  • Межпроцессорное взаимодействие

Межпроцессное взаимодействие Википедия

IPC: основы межпроцессного взаимодействия

  • Ввод и вывод (I/O)

Ввод и вывод Википедия

Основные методы ввода-вывода (I/O) tproger.ru

  • Основы POSIX

POSIX Википедия

Что такое 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

Ubuntu cheatsheet GitHub

  • Менеджер пакетов

Встроенный менеджер пакетов 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-запросов

  • Коды ответов

  • Заголовки

  • 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

  • Проблемы баз данных

Дополнительные материалы и источники

Made with ♥
LICENSE 2022.