SemperIdem / oh-my-backend

Backend для старта

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Oh My BackEnd

Документ содержит список базовых навыков, которые часто требуются backend разработчику web-приложений.

Метка ⚡ означает что этот пункт для более глубокого и продвинутого изучения темы (если у Вас есть время).

Каждый пункт подразумевает что:

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

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

Каждый пункт легко гуглится и имеет страницу в wikipedia. Ссылки устанавливаются если есть альтернативная документация - более понятная и/или подробная. Ссылка на вики ставятся что бы исключить ошибочного варианта статьи на вики.

Содержание

Этап 1. Виртуализация docker

Для начала надо поднять виртуальную машину для экспериментов и изысканий. Даже если уже имеет Linux на рабочей машине, всё равно поднимите виртуализацию. В случае чего, виртуальную машину всегда можно пересоздать.

  • установить docker
  • запустить контейнер с Linux Ubuntu, последней LTS версией. Запустить bash контейнера.
  • установить удобное приложение для урпавления образами и контейнерами Kitematic, Portainer и тд. Либо сродниться с консольными командами docker
  • ⚡ docker compose для поднятия кластера контейнеров

Этап 2. Linux

Изучить установленый в контейнере Linux из этапа 1. Linux де-факто является серверной ос для большинства случаев web-приложений.

  • Установка пакетов и обновление системы через apt/apt-get/aptitude
  • Базовые навыки в bash
    • Базовый синтаксис bash
      • Управляющи операторы for и if
      • Логические ;, &&, ||
    • Базовые команды cd, ls, find, cat, top/htop, cp, mv.
    • Команды обработки данных tail, head, sed, grep, awk.
    • Команды работы с архивами gzip, gunzip, tar, zcat, zless, zgrep
    • Консольные редакторы vim/vi, nano. Откыть файл, внести изменения, сохранить.
    • Консольный просмоторщик less. Открыть, найти слово, закрыть.
    • Конвееры команд через оператор |: cmd1 | cmd2 | cmd3
    • Фоновые задачи, оператор &, команды jobs, fg, bg
    • Перенаправление потоков, операторы >, >>, <
  • Понятие процесс
    • Родительский процесс, дочерний процесс.
    • Мастер-воркер процессы, демон (daemon)
    • Зомби процесс. Откуда берутся, как с ними бороться.
    • Отправка сигналов процессам
    • Команада анализа работы процесса через strace
  • Изучение понятия дескриптор
    • Стандартные дескрипторы STDIN, STDOUT, STDERR и их нумерация в shell-ах
    • Ограничение на дескрипторы
    • Потоки, сокеты и unix-сокеты
    • Команада анализа открытых дескрипторов у процесса через lsof
  • Права и доступы файловой системы
    • Супер пользователь, команды su и sudo
    • Флаги доступов x, r, w (что они значат для файлов и директорий)
    • Понимание описания доступов вида --xr-xrwx и 0137 (восмеричная) у файлов и директорий
    • Изменение прав доступов через команды chmod, chown
  • Исполняемые файлы
  • Запуск и остановка сервисов systemd
  • SSH
    • Генерация собственного ssh-rsa ключа
    • Использование публичного ssh-rsa ключа для входа на удалённую машину (используйте второй контейнер с linux).
  • Перенос контента (помимо cp и mv)
    • scp
    • rsync
  • Планировщик задач crond/crontab, at

Этап 3. Общие знания

Некоторые знания не возможно категоризировать. Но без них не обойтись.

  • Регулярные выражения. Поиграться регулярными выражениями можно тут. Хоть каждый язык может иметь своё видение регулярных выражений, в общем смысле (и синтаксисе) они похожи.
  • Криптография
    • Хеши и хеш функции, в том числе crc32, md5, sha1, sha256. Цифровые подписи, соль для подписей, коллизии хешей.
    • Симметричное и асимметричное шифрование.
    • Алгоритмы шифрования.
    • SSL и TLS.
  • Базовая работа с git
  • Стуктуры хранения данных
  • Форматы хранения и передачи данных
    • Текстовые
      • JSON
      • YAML
      • XML
    • Бинарные
      • MessagePack
      • BSON
      • ProtoBuf

Этап 4. Сеть

Сеть в разработке самая важная и, часто, мало заметная часть.

  • Базовое понимание работы сети, протокл TCP и протокл UDP.
    • TCP пакет, UDP пакет
    • TCP:
      • ⚡ Флаги ACK, SYN, FIN и прочие
      • Window size
    • ⚡ Сетевые издержки: Pocket loss, Reordering, Jitter, Round-Trip Time (RTT aka ping aka лаг)
    • проблемы TCP
  • IPv4, IPv6
  • DNS
  • Трассировки маршрутов.
  • ⚡ анализ трафика через tcpdump + wireshark

Этап 5. Базы данных

Без баз данных - никуда. Самая частый вид баз данных - реляционные.

  • SQL базы данных MySQL/Postgres/итд. MySQL подразумевает как MySQL от Oracle, так и различные модификации как MariaDB, Percona XTraDB
    • Базовый синтаксис запросов SELECT/INSERT/UPDATE/DELETE
    • Создание и модификация таблиц
      • Типы колонок таблиц их назначение их различие (на примере MySQL и схожих)
        • tinyint/smallint/int/bigint
        • tinytext/text/mediumtext/longtext
        • set/enum
        • char/varchar
        • decimal
        • double
        • прочие
      • Создание и применеие ALTER запросов.
    • Анализ выполнения запросов через EXPLAIN, понимание результатов EXPLAIN.
    • Ведение логов медленных запросов — slow_log.
    • Понимание работы индексов
      • Назначение PRIMARY индексов
      • Назначение UNIQUE/обычный индексов
      • Составные индексы.
        • Понимание какие поля в какой последовательности добавлять в индекс при фиьтрации и сортировке одновременно.
      • ⚡ Алгоритм построения индексов BTREE
    • Объединение таблиц LEFT JOIN, RIGHT JOIN, INNER JOIN, OUTER JOIN, JOIN
    • Группировка данных через GROUP BY
      • Фильтрация после группировки
      • Функции работы с группами MAX/MIN/AVG/итд
    • Понимание и назначение внешних ключей (foreign key)
    • Транзакции
      • Уровни изоляций транзакций
      • Deadlock и как его не допускать
    • ⚡ Триггеры на INSERT/UPDATE/DELETE
    • Хранение деревьев
      • parent-child
      • nested sets
  • noSQL базы данных MongoDB/DocumentDB
    • Типы колонок таблиц их назначение их различие
    • Анализ выполнения запросов через explain(), понимание его результатов.
    • Понимание работы индексов (аналогично SQL индексам с небольшими отличиями)
    • Вложенные объекты, массивы.
    • ⚡ Аггрегации
  • Redis
    • базовая работа с ключами
    • работа со списками
    • работа с хешами
    • работа с набором и сортированным набором
    • ⚡ Структура хранения данных skip list

Этап 6. Протокол HTTP

Каждый WEB разработчик должен понимать протокол HTTP. Разработчик который не знает HTTP протокол — это как сапожник без сапог.

Этап 7. Безопасность

  • Виды управления доступом
    • ACL
    • RBAC
  • Аутентификация
    • Basic
    • OAuth
    • Ldap
  • Виды атак
    • Фишинг сайта
    • Инъекции (включая SQL-иньекции)
    • XSS акака
    • HTTP DDOS
    • Медленный POST/PUT/другой запрос с телом запроса
    • ⚡ SYN flood

Этап 8. Тут должен быть ваш язык программирования

Языков программирования большое множество. Поэтому этот этап будет задевать только часто встречающиеся вопросы в большинстве популярных языков программирования. Принцип работы с этим разделом: гуглите %ваш_язык_программирования% %пункт_из_этапа%

  • Что такое интерпертатор, компилятор, JIT, оп-код, байт-код. Что из этого использует ваш язык?
  • Ваш язык программирования
    • Базовые (примитивные) типы данных в языке
    • Объекты/классы/прототипы
    • Преобразование типов
    • Слабая/сильная типизация в коде (если есть). На что влияет и как с этим жить.
    • Проблемы в коде
      • Бесконечные циклы
      • Рекурсии
      • Ошибка сегментирования (и ее связь с сигналом SIGSEGV)
  • Распараллеливание
    • Различие процессов (созданные через fork) от потоков (thread)
      • Поведение дескрипторов до и после fork
    • Потоки (threads)
      • Зелёные потоки (Green threads)
      • Race Condition
      • Блокировки Mutex и Семафоры
    • Процессы
      • Разделяемая память (Shared memory)
      • Межпроцессное взаимодействие (IPC)
    • Корутины
  • Битовые операции: not, and, or, xor, сдвиг влево, сдвиг вправо
  • Кеширование данных
  • Сессии (пользователей)
    • Как инициировать
    • Где храняться
    • Параллельное использование одной сессии несколькими запросами
  • Принципы программирования
    • KISS
    • IoC
  • Юнит тестирование
    • Ознакомление с системой тестирования в вашем языке
    • Test-Driven Development (TDD)
  • Специфика работы IO (сокетов, дескрипторов, потоков)
    • Буфферы IO
    • Асинхронный IO (если доступен)
  • Работа с Last-Modified + 304

Этап 9. Электронная почта

Работа с эл. письмами неотъемлемая часть web разработки (да и не только). Если не придется создавать письма вручную то читать "сырое" письмо придется.

  • Протоколы передачи почты POP3, IMAP
  • Спецификация письма MIME
    • Основные заголовки: Return-Path, Received, From, To, Cc, Bcc, Reply-To, Subject, Message-ID
    • прочие заголовки
    • указание кодироквки
    • кодирование полей и тела в base64

Этап 10. Полнотексовый поиск через ElasticSearch

Каждый разработчик сталкивается с необходимостью полнотекстового поиска, да и вцелом быстрого поиска по куче аттрибутов и текстов. Для этого используются различные полнотекстовые поисковые движки такие как ElasticSearch, SphinxSearch, ManticoreSearch и тд. Самый распространненый полнотексовый поисковый движок с большим комунити — ElasticSearch.

  • Индексы. Как с ними работать и их ограничения.
  • Базовые запросы
    • Запросы поиска
    • Запросы добавления/обновления документов, включая bulk
  • Подключение морфологий
  • mapping и их шаблоны
  • ⚡ аггрегации и их кешировани
  • ⚡ шардинг
  • работа с nested-документами
  • ELK

Этап 11. Метрики

Любое приложение должно уметь генерировать полезные метрики для система сбора и анализа метрик. По факту сейчас среди opensource акуален Prometheus для сбора и анализа метрик и Grafana для их отображения и алертов.

  • Prometheus
    • Типы метрик
      • count
      • gauge
      • histogram
      • summary
    • Варианты отправки метрик в Prometheus: push и pull
    • Запросы (лучше и наглядней делать из Graphana)
  • Graphana
    • Создание дашбордов
    • Создание графиков
    • Настройка алертов

About

Backend для старта