engineering-practice
Инженерная практика
Привычки, которые отличают пет-проект от профессиональной команды, — хорошо тестировать, безопасно выкатывать изменения и поддерживать сервис живым в продакшене.
Начать трек →С нуля
Перед senior-материалом: что вообще такое инженерная практика и горстка слов, которые остальной трек считает уже знакомыми.TDD и property-based-тестирование
Тест-сначала — это давление на дизайн, а не ритуал покрытия: red-green-refactor вскрывает плохие интерфейсы рано, правило границ укрощает тестовые дублёры, property-тесты находят граничные случаи, которые вы бы не перечислили, а мутационное тестирование — честная метрика того, заметит ли набор баг.Контрактное тестирование
Сквозное интеграционное тестирование рушится с масштабом; consumer-driven-контракты заставляют потребителя задать истину, провайдер проверяет её через брокер, а can-i-deploy превращает матрицу верификации в гейт безопасности деплоя — заменяя бо́льшую часть межсервисного e2e для известных внутренних потребителей.Ревью кода
Ревью существует, чтобы ловить дизайн и замысел, а не стиль — механическое автоматизируйте; размер PR задаёт и задержку, и обнаружение, действенный фидбэк с пометкой важности бьёт вердикты, а на масштабе вы маршрутизируете владение, ограничиваете время подхвата и иногда переводите ревью в непрерывное или post-commit.Trunk-based разработка
Почему частота интеграции — главный рычаг элитной поставки: вливайтесь в trunk ежедневно, прячьте незавершённую работу за флагами, пропускайте каждый merge через зелёный CI и удаляйте ветки и флаги так же быстро, как создаёте.Feature flags
Feature flags: расцепить деплой и релиз, не утонув в долге флагов
Флаги шипят код тёмным и релизят тумблером, покупая постепенный выкат и мгновенный kill-switch. Цена сеньора: каждый…
Postmortems
Безвинные постмортемы: превращать аварии в системы, что чинишь, а не в людей, кого винишь
Вина заставляет людей прятать инциденты, и ты теряешь обучение. Безвинный постмортем трактует отказ как данные:…
On call
On-call и реакция на инциденты: каждый пейдж должен быть actionable
On-call живёт или умирает на одном правиле: каждый алерт actionable или удаляется. Пейджи по симптомам, движимые SLO,…
Мастерство отладчика
Отладчик — микроскоп с управляемым исполнением; брейкпоинты, watchpoint'ы, core dump'ы и live-трейсинг превращают невоспроизводимый баг в наблюдаемый.Putting it together
Собираем вместе: практики — одна петля обратной связи, не чеклист
TDD, контрактные тесты, ревью, trunk-based dev, флаги, on-call и постмортемы — не независимые ритуалы, а одна петля,…
Проекты по этому треку
Guided-проекты, которые закрепляют изученное здесь.
Очередь задач at-least-once
Собери долговечную очередь задач на Postgres с visibility timeout и идемпотентными консьюмерами, чтобы упавший воркер не терял задачу.
Фильтр Блума
Собери пространственно-эффективное вероятностное множество, отвечающее на запросы членства за O(1) с настраиваемой вероятностью ложных срабатываний, — и разберись, почему ложных отрицаний в нём быть не может принципиально.
Лаборатория cache stampede
Воспроизведи thundering-herd промах кэша под нагрузкой, затем убей его через single-flight и пересчёт с ранним истечением.
Прерыватель цепи
Собери прерыватель цепи, который прекращает долбить падающую зависимость, безопасно прощупывает её в состоянии half-open и автоматически восстанавливается — именно этот паттерн не даёт каскаду микросервисов превратить один плохой узел в полный простой.
Кольцо consistent hashing
Собери кольцо на виртуальных узлах, которое перераспределяет минимальный набор ключей при появлении или уходе узла — базовый примитив за Dynamo, Cassandra и каждым шардированным кэшем, который должен пережить ротацию узлов без полного перебалансирования.
Сервис фич-флагов
Собери небольшой сервис флагов с правилами таргетинга, процентными раскатками и типизированным SDK, который вычисляет флаги на клиенте из закешированного набора правил.
Кодирование Хаффмана
Собери lossless-компрессор с нуля: постройте оптимальное дерево prefix-free кодов снизу вверх, выведи битовые строки и докажи, что round-trip точен, а результат короче кодирования фиксированной шириной.
Офлайн-синхронизация PWA
Notes PWA с офлайн-приоритетом: локальная очередь записей (IndexedDB), которая синхронизируется при переподключении через last-writer-wins, service worker для кеширования ресурсов и background sync для пропущенных записей.
Загрузка через presigned URL
Прямая загрузка в хранилище через presigned URL с ограничениями размера и content-type и webhook завершения, проверяющим, что объект действительно прибыл, — чтобы API-сервер никогда не касался байт файлов.
Визуализатор планов запросов
Вставь EXPLAIN (ANALYZE, FORMAT JSON) и отрисуй дерево плана с таймингом по узлам и ошибкой оценки строк, чтобы плохой join был виден сразу.
Распределённый rate limiter
Собери token-bucket лимитер, который держится поперёк многих инстансов приложения за счёт счётчика в Redis, а не в памяти процесса.
Движок регулярных выражений
Собери движок регулярных выражений с нуля через конструкцию Томпсона и симуляцию подмножества состояний — тот же метод, что делает grep и re2 иммунными к катастрофическому обратному ходу.
Список с пропусками
Реализуй вероятностную упорядоченную структуру данных, которая обеспечивает O(log n) поиск, вставку и удаление без балансировочной бухгалтерии деревьев — только слоистые «экспресс-полосы» через отсортированный связный список.
Текстовый diff — алгоритм Майерса
Реализуй алгоритм diff Майерса с нуля: вычисли наибольшую общую подпоследовательность, построй edit script обратным ходом, докажи минимальность и применяй патчи так, чтобы любой round-trip был побайтово точным.
Планировщик сборки на топологической сортировке
Собери планировщик задач на основе DAG — как Make или CI-пайплайн — который упорядочивает задачи по зависимостям, обнаруживает циклы до дедлока и определяет, какие задачи можно выполнять параллельно.
Union-Find (система непересекающихся множеств)
Построй структуру непересекающихся множеств от наивного массива родителей до почти константного амортизированного времени — и прими на ней алгоритм Краскала для поиска минимального остовного дерева.
URL-сокращатель под нагрузкой
Собери URL-сокращатель, который выдерживает настоящий трафик, — а потом эксплуатируй его: задеплой, наблюдай и разберись с инцидентом, когда одна горячая ссылка плавит твой кэш.
SQL и PostgreSQL вглубь
Язык SQL и внутренности Postgres для senior-инженеров — джоины, окна, CTE, транзакции, планировщик.