109 статей для Junior Backend-разработчика: большая подборка
Материалы для старта в серверной разработке: HTTP, языки и фреймворки, SQL, REST API, Git, тестирование, Docker и основы безопасности.
Как работает backend и HTTP
- Что выбрать новичку для домашнего веб-сервера: Nginx, Caddy или Apache
Чтобы понимать обмен данными между браузером и сервером.
- Шаблон backend сервера на Golang — часть 1 (HTTP сервер)
Чтобы понимать обмен данными между браузером и сервером.
- Мосты цифрового мира: клиент-сервер, сервер-сервер
Чтобы понимать обмен данными между браузером и сервером.
- Слабо поднять такой крошечный контейнер? Создаем контейнеризованный HTTP-сервер на 6kB
Чтобы одинаково запускать приложение в любой среде.
- Пример HTTP-сервера на PHP с использованием файберов
Чтобы понимать обмен данными между браузером и сервером.
- Трехэтажные C++ные шаблоны в реализации встраиваемого асинхронного HTTP-сервера с человеческим лицом
Чтобы выполнять долгие операции без зависания.
- HTTP/1 и HTTP/2 сервера на nodejs
Чтобы понимать обмен данными между браузером и сервером.
- Создаём HTTP-сервер на Java NIO
Чтобы понимать обмен данными между браузером и сервером.
- Простейший HTTP сервер на Golang и Elixir. Сравнение производительности
Чтобы понимать обмен данными между браузером и сервером.
- RESTinio — это асинхронный HTTP-сервер. Простой пример из практики: отдача большого объема данных в ответ
Чтобы выполнять долгие операции без зависания.
- Пишем высокопроизводительный http клиент на примере fasthttp. Александр Валялкин (VertaMedia)
Чтобы понимать обмен данными между браузером и сервером.
- Пишем HTTP-сервер на php и сокетах
Чтобы понимать обмен данными между браузером и сервером.
Языки и серверные фреймворки
- Экономика выбора: Python, Java, Go при разных RPS. Деньги или скорость?
Чтобы выбрать стек и реализовать серверную логику.
- Руководство для начинающих по серверной веб-разработке с Node.js
Чтобы выбрать стек и реализовать серверную логику.
- 9 лет в монолите на Node.JS
Чтобы выбрать стек и реализовать серверную логику.
- Как устроены память и Garbage Collector в CPython: разбор для Python backend interview
Чтобы выбрать стек и реализовать серверную логику.
- Дорожная карта Java backend-разработчика: c Junior до Middle
Чтобы выбрать стек и реализовать серверную логику.
- Апгрейд и рефакторинг PHP-проектов — теперь это просто с Rector
Чтобы выбрать стек и реализовать серверную логику.
- Практическое руководство по разработке бэкенд-сервиса на Python
Чтобы выбрать стек и реализовать серверную логику.
- 5 неочевидных возможностей FastAPI: упрощаем работу с бэкендом на Python
Чтобы выбрать стек и реализовать серверную логику.
- Фреймворк Swoole на PHP для начинающих
Чтобы выбрать стек и реализовать серверную логику.
- О Web-Backend разработке для начинающих
Чтобы выбрать стек и реализовать серверную логику.
- От C до Go. Как Golang объединил лучшие черты своих предшественников
Чтобы выбрать стек и реализовать серверную логику.
- Архитектура современных корпоративных Node.js-приложений
Чтобы выбрать стек и реализовать серверную логику.
Алгоритмы и структуры данных
- Как пройти алгоритмическое собеседование: полный гид по алгоритмам, сложностям и стратегиям
Чтобы принимать решения на основе данных.
- Структуры данных и алгоритмы, которыми я пользовался, работая в технологических компаниях
Чтобы принимать решения на основе данных.
- LJV: Чему нас может научить визуализация структур данных в Java
Чтобы принимать решения на основе данных.
- Как я изучал структуры данных и алгоритмы для собеседования в FAANG
Чтобы принимать решения на основе данных.
- JavaScript: структуры данных и алгоритмы. Часть 3
Чтобы принимать решения на основе данных.
- Выбор структур данных для самописного текстового редактора
Чтобы принимать решения на основе данных.
- JavaScript: структуры данных и алгоритмы. Часть 4
Чтобы принимать решения на основе данных.
- Как я написал алгоритм сортировки, который быстрее std::sort. Продолжение
Чтобы принимать решения на основе данных.
- Коротко про алгоритмы и структуры данных
Чтобы принимать решения на основе данных.
- JavaScript: структуры данных и алгоритмы. Часть 1
Чтобы принимать решения на основе данных.
- Сложность алгоритмов. Разбор Big O
Чтобы принимать решения на основе данных.
- JavaScript: структуры данных и алгоритмы. Часть 2
Чтобы принимать решения на основе данных.
SQL и реляционные базы данных
- Выбор индексов в базах данных для highload‑систем
Чтобы получать и изменять данные запросами.
- Погружаемся в базы данных и SQL: полезные материалы и инструменты от сотрудников Selectel
Чтобы получать и изменять данные запросами.
- Сравнение SQL- и NoSQL-баз данных
Чтобы получать и изменять данные запросами.
- «Postgres. Первое знакомство» (11-е издание) надёжный проводник в мир PostgreSQL
Чтобы получать и изменять данные запросами.
- B-Tree индекс и его производные в PostgreSQL
Чтобы получать и изменять данные запросами.
- Больше разработчиков должны знать это о базах данных
Чтобы получать и изменять данные запросами.
- Здоровье индексов в PostgreSQL глазами Java-разработчика
Чтобы получать и изменять данные запросами.
- TimescaleDB против всех: как база данных справляется с рядом сложных задач
Чтобы получать и изменять данные запросами.
- Погружение в индексы PostgreSQL
Чтобы получать и изменять данные запросами.
- Self-modifying SQL: динамическое изменение SQL-кода в процессе выполнения
Чтобы получать и изменять данные запросами.
- Виды баз данных. Большой обзор типов СУБД
Чтобы получать и изменять данные запросами.
- Распространённые ошибки изменения схемы базы данных PostgreSQL (Николай Самохвалов)
Чтобы получать и изменять данные запросами.
REST API и работа с данными
- JSON:API 一 это не JSON API
Чтобы передавать структурированные данные между системами.
- Валидация тела ответа с помощью JSON-Schema
Чтобы передавать структурированные данные между системами.
- REST API на котиках
Чтобы проектировать понятные и стабильные API.
- Принципы построения REST JSON API
Чтобы передавать структурированные данные между системами.
- Проектирование REST API: спорные вопросы с проектов и собеседований на системного аналитика (и не только)
Чтобы проектировать понятные и стабильные API.
- JSON API – работаем по спецификации
Чтобы передавать структурированные данные между системами.
- Безопасность REST API от А до ПИ
Чтобы проектировать понятные и стабильные API.
- Как проектировать качественные API
Чтобы проектировать понятные и стабильные API.
- Создание RESTful API с помощью Django и Django REST Framework
Чтобы проектировать понятные и стабильные API.
- Полный набор gRPC, RESTful JSON API, WS и Swagger из одного proto файла. От введения до нюансов и тонкостей grpc-gateway
Чтобы передавать структурированные данные между системами.
- Json api сервис на aiohttp: middleware и валидация
Чтобы передавать структурированные данные между системами.
- Как написать свою первую спецификацию на REST API. С какими ошибками может столкнуться аналитик и как их избежать?
Чтобы проектировать понятные и стабильные API.
Git, Linux и командная строка
- Linux: Файлы, навигация и поиск
Чтобы контролировать изменения и работать в команде.
- Linux: Процессы
Чтобы контролировать изменения и работать в команде.
- Linux для начинающих: WSL — это читерство. Как Microsoft дал нам Linux без головной боли
Чтобы контролировать изменения и работать в команде.
- Git для самых маленьких. От первой команды до настройки SSH
Чтобы контролировать изменения и работать в команде.
- Bash-скрипты, часть 3: параметры и ключи командной строки
Чтобы контролировать изменения и работать в команде.
- Linux для начинающих: WSL — это читерство. Как Microsoft дал нам Linux без головной боли. Часть 2
Чтобы контролировать изменения и работать в команде.
- SSH с высоты птичьего полёта, или разгребаем кучи ключей
Чтобы контролировать изменения и работать в команде.
- Дисковая подсистема в ОС Linux
Чтобы контролировать изменения и работать в команде.
- Linux: Права доступа
Чтобы контролировать изменения и работать в команде.
- Скрытая сила терминала или почему всем нужно уметь работать через командную строку
Чтобы контролировать изменения и работать в команде.
- Руководство по администрированию Linux для начинающих
Чтобы контролировать изменения и работать в команде.
- Linux: Пользователи и группы
Чтобы контролировать изменения и работать в команде.
Тестирование и отладка
- Как писать юнит-тесты, если совсем не хочется
Чтобы находить ошибки до выпуска продукта.
- Как упростить себе жизнь: удобные юнит-тесты с JUnit и AssertJ
Чтобы находить ошибки до выпуска продукта.
- От Jest к Vitest на backend тестах: как мы мигрировали тестовый фреймворк для ускорения CI и повышения стабильности
Чтобы находить ошибки до выпуска продукта.
- Как провести нагрузочное тестирование правильно. Часть 1: как думать о тестировании производительности
Чтобы находить ошибки до выпуска продукта.
- Как перестать беспокоиться и начать внедрять интеграционные тесты
Чтобы находить ошибки до выпуска продукта.
- Гайд по автотестам, часть 2. Юнит-тесты
Чтобы находить ошибки до выпуска продукта.
- Shift-Left тестирование с Testcontainers: ловим баги на ранних этапах локальными интеграционными тестами
Чтобы находить ошибки до выпуска продукта.
- Единый формат тестовых данных. Или как ускорить разработку интеграционных тестов
Чтобы находить ошибки до выпуска продукта.
- Record-and-Replay тестирование — сочетание достоинств юнит и интеграционных тестов
Чтобы находить ошибки до выпуска продукта.
- Оценка тестового покрытия интеграционных тестов с помощью JaCoCo. Инструкция к применению
Чтобы находить ошибки до выпуска продукта.
- Что такое pytest и как его использовать? Или как новичку начать автоматизировать тестирование?
Чтобы находить ошибки до выпуска продукта.
- Инструментарий для анализа и отладки .NET приложений
Чтобы находить ошибки до выпуска продукта.
Docker и первая публикация
- Основы Docker: контейнеризация, Dockerfile и Docker Compose. Часть 2
Чтобы одинаково запускать приложение в любой среде.
- Docker изнутри: исчерпывающее руководство. Механизмы контейнеризации + примеры, эксперименты и реализация
Чтобы одинаково запускать приложение в любой среде.
- Docker Fundamentals: что внутри compose.yaml и как там всё устроено
Чтобы одинаково запускать приложение в любой среде.
- Docker Compose: Фичи, которые ускорят вашу разработку
Чтобы одинаково запускать приложение в любой среде.
- Управление временем контейнера с помощью docker-compose и faketime
Чтобы одинаково запускать приложение в любой среде.
- Пишем простой docker-compose.yml для контейнеризации приложения (React, Spring Boot, PostgreSQL, pgAdmin)
Чтобы одинаково запускать приложение в любой среде.
- Настройка cервера с помощью docker для простых проектов. Часть вторая: docker-compose
Чтобы одинаково запускать приложение в любой среде.
- Как я реализовал Blue-Green деплой с нулевым даунтаймом на Docker Compose
Чтобы одинаково запускать приложение в любой среде.
- Шаблон backend сервера на Golang — часть 3 (Docker, Docker Compose, Kubernetes (kustomize)
Чтобы одинаково запускать приложение в любой среде.
- Зачем рассказывать про контейнеризацию в 2023 году
Чтобы одинаково запускать приложение в любой среде.
- Docker для новичков — #3 Что нужно знать о Docker compose
Чтобы одинаково запускать приложение в любой среде.
- Быстрый запуск PostgreSQL через Docker Compose
Чтобы одинаково запускать приложение в любой среде.
Безопасность серверного приложения
- Азбука безопасности в Kubernetes: аутентификация, авторизация, аудит
Чтобы снизить риски и защитить систему.
- Пишем gRPC сервис на Go — сервис авторизации
Чтобы снизить риски и защитить систему.
- Простой сервис аутентификации и авторизации по JWT на основе фильтров SpringSecurity
Чтобы снизить риски и защитить систему.
- Как правильно хешировать пароли в высоконагруженных сервисах. Опыт Яндекса
Чтобы снизить риски и защитить систему.
- SmartFlow: «В начале был пароль…» или новая аутентификация VK ID
Чтобы снизить риски и защитить систему.
- Соль и перец в безопасности паролей
Чтобы снизить риски и защитить систему.
- Всё, что вы хотели знать о безопасном сбросе паролей. Часть 1
Чтобы снизить риски и защитить систему.
- OWASP ZAP для начинающих: как провести аудит безопасности веб-приложений
Чтобы снизить риски и защитить систему.
- Анализ безопасности хранения и хеширования паролей при помощи алгоритма MD5
Чтобы снизить риски и защитить систему.
- Обзор OWASP ZAP. Сканер для поиска уязвимостей в веб-приложениях
Чтобы снизить риски и защитить систему.
- Идентификация, Аутентификация, Авторизация. В чем же разница?
Чтобы снизить риски и защитить систему.
- Taneleer на смену Thanos – как мы поменяли подход к обнаружению скомпрометированных паролей
Чтобы снизить риски и защитить систему.
Организация работы
- Декомпозиция целей и задач
Чтобы превращать цели в понятные задачи.