performance
Производительность
Как найти, почему программа тормозит, и действительно её ускорить — сначала замерь, потом чини настоящее узкое место, а не угадывай.
Начать трек →С нуля
Перед senior-материалом: что вообще такое работа над производительностью и горстка слов, которые остальной трек считает уже знакомыми.Сначала профиль: измерь куда реально уходит время
Почему интуиция ошибается чаще половины случаев, как закон Амдала задаёт потолок любому ускорению, и какой измерительный цикл сеньоры запускают до того, как трогают строчку кода.Горячие пути: диагностика, формы и исправления
Горячий путь — функция, которую профилировщик находит снова и снова. Пять форм (CPU, аллокация, кеш, лок, syscall), один диагностический цикл и аппаратные счётчики, разрешающие неоднозначность — от junior-интуиции до senior TMA.Cache vs big-O: когда учебник лжёт
O(N) сканирование contiguous памяти регулярно бьёт O(log N) обход дерева — потому что cache lines, prefetcher и branch prediction доминируют wall-clock time способами, которые big-O не может описать.Сборка мусора: бюджет пауз, давление аллокаций и невидимый хвост
Пауза GC — симптом; rate аллокаций — причина. Сначала сокращай аллокации, потом настраивай коллектор, в последнюю очередь меняй алгоритм.N+1: одна логическая операция, много round-trip'ов
Почему один экран рендерится в 200 запросов к БД, четыре паттерна фикса (JOIN, IN, batch-loader, prefetch) с tradeoff'ами, и как та же проблема повторяется в REST, gRPC и микросервисном fan-out.Batching: амортизируй фиксированную цену каждой операции
Per-op фикс. цена доминирует? Батч. Окно = размер и max wait; бо́льшие батчи покупают throughput, платят tail-latency.Bundle budgets: байты, за которые юзеры реально платят
JS bundle байты = parse + compile + execute на CPU юзера. Per-route бюджеты, enforce CI, monitor RUM.Складываем всё: performance как дисциплина, не как проект
Семь инструментов, один цикл. Profile, classify, fix, verify, enforce. Цикл делает performance устойчивым свойством команды, а не разовым проектом.Проекты по этому треку
Guided-проекты, которые закрепляют изученное здесь.
Совместные курсоры
Показать живой курсор и выделение каждого подключённого пользователя в общем документе, без конфликтов, через WebSocket.
Конкурентный сервис ингеста на Go
Собери конкурентный воркер ингеста/фан-аута на Go — а затем эксплуатируй его: ограничь работу, примени backpressure, сделай вызовы downstream устойчивыми к отказам, выкати в минимальном контейнере и разбери инцидент с утечкой горутин, пока он не съел твою память.
Next.js-приложение в продакшен
Собери мультитенантное контент-приложение на App Router — а потом эксплуатируй его: закрой авторизацию и секреты, наслои кэши, реши каждый выбор edge-vs-node и разберись с инцидентом, когда один тенант отравляет общую ISR-страницу.
Асинхронный Python-сервис: собрать и эксплуатировать
Собери асинхронный FastAPI-сервис приёма, который валидирует, прогоняет через пайплайн и выдерживает нагрузку, — а потом эксплуатируй его: упакуй, контейнеризуй с корректным поведением PID-1 и разберись с инцидентом, когда проглоченный CancelledError тихо протекает задачами, пока event loop не начинает голодать.
Распределённый rate limiter
Собери token-bucket лимитер, который держится поперёк многих инстансов приложения за счёт счётчика в Redis, а не в памяти процесса.
React-фича под нагрузкой
Выкати одну настоящую production-фичу на React — живой совместный дашборд активности — а потом эксплуатируй её: оптимистичные правки, стриминговые обновления, бюджет на кадр, полную доступность и разбор инцидента, когда render-шторм замораживает вкладку.
URL-сокращатель под нагрузкой
Собери URL-сокращатель, который выдерживает настоящий трафик, — а потом эксплуатируй его: задеплой, наблюдай и разберись с инцидентом, когда одна горячая ссылка плавит твой кэш.
Виртуальная таблица данных
Отрисуй и плавно прокручивай 100 тыс. строк на 60fps с windowing-виртуализацией, залипающими заголовками и полной клавиатурной навигацией — без библиотек, только математика.
Краш-устойчивое key-value хранилище с WAL
Собери крошечное дисковое KV-хранилище, которое переживает kill -9 на середине записи, дописывая в write-ahead log до изменения основного файла.
Data engineering
Работа с данными в больших объёмах — как дёшево хранить огромные массивы и строить по ним аналитику и поиск. Продвинутый уровень; сначала изучи обычные базы данных.