Самоучитель voidlearn: Go, Git, DevOps и собеседования для бэкенд-разработчика
Бесплатный самоучитель для бэкенд-разработчика: язык Go изнутри, конкурентность, память и GC, базы данных, Redis, брокеры, сети, Git, Linux, Docker, Kubernetes, CI/CD и вопросы с собеседований с разбором.
Go
Язык, конкурентность, память, данные, сети и архитектура.
- Go: язык — Секция, на которой отсеивают. Здесь почти не спрашивают «как написать» — спрашивают «что лежит в памяти и что произойдёт». Поэтому каждая глава идёт от структуры данных в рантайме к наблюдаемому…
- Конкурентность — Секция, ради которой Go и берут. Её спрашивают всегда, копают глубже всех остальных и почти наверняка попросят что-нибудь написать руками — worker pool, merge, таймаут. Поэтому здесь важны не…
- Память, GC и производительность — Секция, где кандидат либо один раз в жизни читал статью про трёхцветную маркировку и пересказывает её по памяти, либо действительно ходил в прод с pprof. Разница слышна на втором уточняющем вопросе…
- Ошибки и отказоустойчивость кода — Секция, которая отделяет «умею писать на Go» от «умею держать сервис живым». Синтаксис здесь на десять минут — if err != nil знают все. Дальше начинается настоящее: чья это ошибка, кто её…
- Тестирование — Секция, которую большинство кандидатов проваливает не незнанием, а поверхностностью: «ну, табличные тесты, testify, моки». Middle отличается тем, что может объяснить механику — почему t.Cleanup и…
- Базы данных — По частоте это тема номер один: её спрашивают и системщики, и продуктовые команды, и на секции алгоритмов вместо алгоритмов. Причина простая — в бэкенде почти любой инцидент в итоге упирается в БД…
- Кэширование и Redis — Секция, где очень легко получить «средний» балл и очень трудно — высокий. Все знают, что такое cache-aside и что KEYS нельзя. Отличают тех, кто умеет говорить про гонки на оси времени, про то, что…
- Брокеры сообщений и асинхронность — Секция, где проверяют не знание кнопок в Kafka, а умение рассуждать про распределённую систему с ненадёжной сетью. Почти все вопросы здесь сводятся к одному: «что произойдёт, если сейчас упасть — и…
- Сети — Секция, где backend-разработчика проверяют не на знание RFC, а на способность объяснить, что физически происходит между двумя процессами. Здесь почти нет «выучил — ответил»: почти каждый вопрос…
- Веб-сервисы на Go — Секция, где проверяют не знание синтаксиса, а инженерную зрелость: умеешь ли ты спроектировать контракт, который переживёт три релиза, и написать сервис, который не ляжет от медленного клиента, не…
- Архитектура и системный дизайн — Единственная секция, где нет одного правильного ответа — и именно поэтому она самая показательная. Здесь не проверяют, знаешь ли ты слово «сага». Проверяют, умеешь ли ты назвать цену решения…
DevOps
Где живёт сервис: система, контейнеры, кластер, выкатка и наблюдаемость.
- Linux и ОС — Что происходит с Go-бинарём после go build, когда он работает на живом сервере. Как горутины ложатся на потоки ОС и что делает ядро при системном вызове. Куда уходят дескрипторы, память и место на…
- Docker — Контейнер — не маленькая виртуальная машина, а процесс на общем ядре Linux, и большая часть ошибок растёт отсюда. Как устроены образ и его слои, как собрать Go-сервис быстро, воспроизводимо и без…
- Kubernetes — Как работает кластер, в котором живёт твой сервис. Модель желаемого состояния, базовые объекты, ConfigMap и Secret. Что делает kubelet с подом: containerd и pause-контейнер, requests и limits в…
- CI/CD и деплой — Путь от git push до прода и то, что на этом пути обычно идёт не так. Стадии пайплайна и кэширование, rolling, blue-green и canary, откат релиза и миграции базы, которые не откатываются так же…
- Observability — Как понять, что происходит с сервисом, не заходя на сервер руками. Три столпа наблюдаемости — логи, метрики и трейсы: что даёт каждый, гистограммы и p99, RED и USE, SLI/SLO и error budget, алерты по…
Git
Полный экскурс по git и работе с ним.
- Как устроен Git — Под десятками команд Git лежит небольшая модель: неизменяемые объекты, адресуемые хешем содержимого, ссылки с именами поверх них и индекс между последним коммитом и рабочей копией. Статья идёт снизу…
- Повседневная работа — Каждый день с git делают три вещи: собирают коммиты, наводят порядок в рабочей копии и читают историю. Коммит начинается раньше команды commit: индекс собирают по кускам через add -p, правки…
- Ветки, слияния и rebase — Ветки в git ничего не стоят. Их заводят на каждую задачу, и вся сложность переезжает в момент, когда ветки сводят обратно. Сначала слияние: перемотка, трёхсторонний merge относительно общего предка…
- Удалённые репозитории и работа в команде — Пока работаешь один, весь git живёт в одном каталоге. В команде появляется сервер, и большая часть сюрпризов растёт из того, что твой клон узнаёт о нём с опозданием. С этого статья и начинает…
- Отмена, восстановление и расследование — Коммит ломает прод, ветку удаляют, rebase съедает работу, пароль попадает в историю. Почти всё это чинится, но разными командами. Статья начинается с отмены: три режима reset в терминах трёх…