В этом разделе объединим несколько языков разработки: golang, c++, python, java и тд. На самом деле язык в бэкенде вторичен, куда важнее понимать фундамент разработки. Популярность языка изменяется со временем (сейчас пальму первенства держит golang), поэтому и разработчики нередко меняют язык, но стек технологий везде похожий. Чем крупнее компания, тем больше она может себе позволить дифференцировать задачи и под каждый класс задач выделять отдельную вакансию. В задачи этой гипотетической компании может входить:
— разработка архитектуры приложений
— работа с базами данных
— поддержка сервера
— безопасность
Сейчас активно внедряется в работу ИИ, для этого нужна инфраструктура. Поэтому особенно ценятся разработчики, которые что-то знают из области DS, аналитики, DevOps и тд.
Как уже писали, язык в бэкенде вторичен. Главное технологии и инструменты. Какой-то короткий roadmap можно найти в программе нашего курса бэкенд старт и бэкенд хард . Сейчас опишем подробней в общих чертах.
Шаг 1. Выбираем зык по вкусу (например, GO, JS или C#) и тщательно изучиаем его. Однако помните, что язык не главное, и вам нужно сосредоточиться на развитии широкого понимания технологий, используемых в вебе. Но парочку мыслей и рекомендаций к языку давали в нашем телеграм канале тут .
Шаг 2. Заходим сайт MDN и изучаем, как работает Интернет. На сайте представлен список других полезных ресурсов. Развитие широкого кругозора в вебе поможет вам в долгосрочной перспективе.
Шаг 3. Git — это система контроля версий, используемая при разработке программного обеспечения. Чтобы изучить его, могу посоветовать ресурс , бесплатный, удобный, прикольный. Вам не нужно быть экспертом в Git; вы узнаете его лучше, когда будете работать над своими проектами. Кстати, самое время ими заняться, самые популярные с рекомендациями оставил в нашем телеграм канале тут .
Шаг 4. Linux — популярная операционная система которой пользуются многие разрабы. Можно глянуть например здесь на ютубе .
Шаг 5. Кто бы что ни говорил, базовые алгосы — это важно, можно не уметь переворачивать красно-черные деревья, но знать чем массив отличается от списка и зачем нужна хэш таблица — обязан каждый. Эконом вариант: начать с «Грокаем алгоритмы», потом leetcode + лекции Паши Маврина. Но более эффективный вариант присмотреться к нашему курсу по алгоритмам .
Шаг 6. Предположим что мы уже изучили основы объектно-ориентированного программирования (ООП) при изучении языка. Теперь пришло время изучить паттерны проектирования для создания приложений. Гляньте на SOLID, KISS и YAGNI. Зайдите на метанит , там куча информации.
Шаг 7. Теперь, когда вы знаете, как писать код и приложения, пришло время узнать о тестировании и методах тестирования. Эти знания помогут вам когда будете писать уже какой-то реальный код. Для начала подойдет любой тупой курс на том же степике.
Шаг 8. Изучите основы баз данных Postgres и Mongo. Вам не нужно углубляться, погрузитесь когда устроитесь на работу. 😍 REST API, JWT, клиент-сервер, GRPC, GraphQL, монолиты и микросервисы. К настоящему времени вы должны быть сильным джуном. Сосредоточьтесь на изучении REST API, JWT, клиент-сервер, GRPC, GraphQL, монолитах и микросервисах (важно понять разницу), советую еще вот это почитать.
Шаг 9. Изучаем кэширование и Redis .
Шаг 10. Изучаем Kafka и обмене сообщениями .
Шаг 11. Узнайте о контейнеризации и развертывании с помощью таких инструментов, как Docker, Docker Compose, Docker Swarm, Kubernetes и GitLab CI/CD. Вам не нужно быть экспертом в этих инструментах, но важно понимать, как они работают и зачем они нужны. У всех этих штук достаточно крутые документации, поэтому просто идем туда и читаем.
Шаг 12. Узнайте о балансировке нагрузки и проксировании с использованием Nginx и Traefik. Опять же, вам не нужно становиться девопсом, вам нужно просто знать что это такое и с чем его едят. Думаю, что когда вы дошли до этого этапа вам не нужны ссылки, сами знайте, где что брать.
Шаг 13. Когда вы придете на любой мало-мальски большой проект, у вас там все это будет. Вам нужно погуглить и узнать зачем нужны все эти слова: Jaeger, ELK (Elasticsearch, Logstash, Kibana), Grafana и Prometheus.
Каждый шаг бездонная бочка, поэтому советую осваивать материалы параллельно. Они дадут вам фундамент, с которым смело можно ходить по собесам. Также смотрим всякие конференции по бэкенду, читаем популярные статьи, узнаем популярные вопросы на собесах. Обычно спрашивают баяны из общего информационного поля, потому держим ухо востро!
Пет проекты в первую очередь нужны как элемент вашего образования, чтобы отработать теорию на чем-то более реальном, чем задачи c leetcode. Не нужно изобретать велосипед или новый FaceBook. Просто октрываем GitHub и копипастим самые популярные проекты, может быть как-то их адаптируя. Ниже привожу самые популярные пет проекты.
Микросервис для сокращения URL
Реализация HTTP-сервер на Boost.Asio с интеграцией PostgreSQL/SQLite. В этом проекте акцентируем внимание на архитектуру проекта (разделяем сетевой слой, логику и БД), грамотно реализуем CMake файлы, а также добавим обработку конкурентных запросов через пул потоков.
Создадим две нормализованные таблицы: urls (id, original_url, short_key, created_at) и users (id, username) с внешним ключом user_id в urls. Разделим систему на слои:
1. Сетевой слой: HTTP-сервер на Boost.Asio с обработкой GET/POST запросов
2. Логика: Генерация короткого ключа через хеширование (xxHash) + base62 кодирование
3. Слой данных: Репозиторий для работы с БД через pqxx/SQLiteCpp
Далее реализуем пул из 4-8 worker-потоков (std::thread), которые берут задачи из очереди сокетов, защищенной std::mutex и std::condition_variable. На этапе развертывания создадим Dockerfile с многоступенчатой сборкой и docker-compose.yml для совместного запуска с PostgreSQL.
Многопоточный сборщик метрик
Реализация TCP-сервер для приема/агрегации метрик. В этом проекте потребуем потокобезопасные структуры данных с std::mutex/std::atomic, сброс данных в TimescaleDB, обработку асинхронных операций через Boost.Asio. А также проведем тестирование с помощью юнитки, и аккуратно распишем документацию trade-offs между latency и throughput.
Определим бинарный формат сообщения: [timestamp (8b)][metric_name_length (1b)][metric_name][value (8b)]. Настроим Boost.Asio для приема соединений с callback-обработчиками. Используем async_read с динамическим буфером. Реализуй класс MetricStore. Добавим поддержку персистентности (нужно реализовать фоновый поток, который каждые n секунд блокирует доступ к хранилищу, формирует batch запрос для timescaleDB и выполняет insert). Далее просто реализуем тестирование и всё.
High-load TCP Echo-сервер
Сравним производительность моделей thread-per-connection и асинхронного I/O под нагрузкой, а также реализуем настройку epoll через Boost.Asio, бенчмарки RPS/latency с помощью wrk, анализ потребления памяти в Valgrind. Результаты оформим в графиках GNUplot.
Для thread-per-connection модели создадим основной цикл, принимающий сокеты через acceptor.accept(), и передающий каждый сокет в новый поток (std::thread), где данные читаются socket.read_some() и немедленно пишутся обратно socket.write_some(). Для асинхронной модели инициализируем boost::asio::io_context с пулом рабочих потоков, используя boost::asio::async_read и boost::asio::async_write с callback-обработчиками. Настроим epoll через acceptor.set_option(boost::asio::detail::socket_option::integer
В процессе написания проектов стоит придерживаться стайлкоду и писать всё аккуратно, тщательно продумывать архитектору (можно даже uml диаграмму проекта построить). Архитектура проекта должна быть разделена (например на сетевой слой, логика, обработка бд, утилиты. Стоит писать эффективный современный код (то есть RAII, пользоваться умными указателями). Следуй паттернам программирования (SOLID и т п ).
По этой ссылке в тг собраны тестовые и прочие полезные материалы по аналитике. Если у вас есть чем подобным поделиться пишите в тг @vice22821, в долгу не останемся!
По этой ссылке в тг собраны собеседования и прочие полезные материалы по бэкенд разработке. Если у вас есть чем подобным поделиться пишите в тг @vice22821, в долгу не останемся!