Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Code Review Pro
Code Review·10 тем·80 вопросов·уровень Middle, Senior

Code Review Pro

Что искать в сложном коде: проблемы, которых не видно в самом диффе. Архитектура и направление зависимостей, race conditions, индексы и границы транзакций, обратная совместимость API, авторизация и криптография, кэш и очереди, технический долг, метрики кода и статический анализ. Для middle+ и tech lead.

Начать курс

Code Review Pro

Базовое ревью отвечает на вопрос «работает ли код». Продвинутое — на вопрос «что этот код будет стоить через год и под нагрузкой».

Чему учит курс

Проблемы, которые разбираются здесь, объединяет одно: они не видны в самом диффе. Индекс отсутствует не в этих тридцати строках, а в схеме таблицы. Race condition не в коде обработчика, а в том, что два обработчика теперь пишут в одну строку. Ломающее изменение API не в сигнатуре метода, а в том, что старый мобильный клиент останется в проде ещё полгода.

Курс учит достраивать этот невидимый контекст: какие вопросы задать к диффу, где посмотреть, чтобы подтвердить подозрение, и как сформулировать возражение так, чтобы оно не звучало как вкусовщина.

Каждая тема содержит блок «Разбор» — настоящий дифф с комментариями ревьюера дословно, включая ответ автора и то, чем спор закончился.

Границы курса

КурсОтвечает на вопрос
Основы Code ReviewКак проводить ревью: порядок чтения, приоритеты, формулировки
Code Review Pro (этот)Что искать в сложном коде: архитектура, конкурентность, БД, масштаб
Code Review для командыКак устроить процесс: SLA, метрики, культура, конфликты

Курс предполагает, что базовые категории — off-by-one, голый except, N+1 в очевидном цикле, секрет в коде — вы уже видите автоматически. Если нет, начните с Основ.

Две пары тем легко перепутать, поэтому граница проведена явно:

  • Метрики качества кода здесь — про код (цикломатическая сложность, связность, coupling). Метрики процесса — turnaround time, DORA — в курсе для команды.
  • Автоматизация здесь — про то, что инструмент способен проверить вместо человека и где он врёт. Как встроить его в workflow и не утопить команду в шуме — в курсе для команды.

Программа

ТемаО чёмСложность
1. Архитектурный анализSOLID на практике ревью, направление зависимостей, протечка слоёв, границы модулейSenior
2. Паттерны проектированияКогда паттерн уместен, как отличить его от over-engineering, паттерны-антипаттерныMiddle–Senior
3. Асинхронность и конкурентностьRace conditions, deadlock, блокирующий вызов в event loop, идемпотентность, потокобезопасностьSenior
4. Работа с БДИндексы под запрос, границы транзакции, уровни изоляции, ORM-ловушки, безопасные миграцииMiddle–Senior
5. Дизайн APIОбратная совместимость, версионирование, пагинация, коды ошибок, контракт как обязательствоMiddle–Senior
6. Безопасность: глубокий разборМодели авторизации и IDOR, криптография и хранение секретов, SSRF, десериализация, цепочка поставокSenior
7. МасштабируемостьКэш и инвалидация, очереди и повторные доставки, backpressure, rate limiting, состояние в процессеSenior
8. Возможности рефакторингаCode smells, технический долг как решение, а не грех; когда рефакторинг не входит в этот PRMiddle–Senior
9. Метрики качества кодаСложность, связность, зацепление, покрытие; как метрику начинают оптимизировать вместо кодаSenior
10. АвтоматизацияЛинтеры, типы, статический анализ, quality gates; что отдать машине, чтобы освободить человекаMiddle–Senior

Как проходить

  1. Прочитайте теорию и разберите дифф в блоке «Разбор» — сначала сами, потом сверьтесь с комментариями ревьюера.
  2. Ответьте на вопросы темы (8 вопросов, 80 на курс).
  3. Закрепите на тренажёре: Code Review Python и Code Review React.
  4. Проверьте себя на Арене — там ревью пишется свободным текстом.

Ключевая мысль: продвинутый ревьюер спорит не с кодом, а с решением, которое за ним стоит. Поэтому его замечания начинаются не с «перепиши», а с «что произойдёт, когда».

  1. 1

    Архитектурный анализ

    SOLID, паттерны, слои архитектуры, зависимости, модульность

    8 вопросов
  2. 2

    Паттерны проектирования в review

    Когда паттерны уместны, когда over-engineering, антипаттерны

    8 вопросов
  3. 3

    Асинхронность и конкурентность

    Deadlock, race conditions, async/await, thread safety

    8 вопросов
  4. 4

    Рецензирование работы с БД

    Индексы, транзакции, ORM pitfalls, миграции

    8 вопросов
  5. 5

    Дизайн API

    REST, versioning, backward compatibility, pagination

    8 вопросов
  6. 6

    Глубокая проверка безопасности

    CWE, OWASP, криптография, аутентификация, авторизация

    8 вопросов
  7. 7

    Масштабируемость

    Кэширование, очереди, rate limiting, горизонтальное масштабирование

    8 вопросов
  8. 8

    Возможности рефакторинга

    Code smells, technical debt, стратегии рефакторинга

    8 вопросов
  9. 9

    Метрики качества кода

    Цикломатическая сложность, coupling, cohesion, покрытие; как метрику начинают накручивать вместо кода. Метрики процесса — в курсе для команды

    8 вопросов
  10. 10

    Автоматизация code review

    Что анализатор способен проверить вместо человека и где он врёт: линтеры, типы, quality gates. Встраивание в workflow — в курсе для команды

    8 вопросов
  11. Зачёт

    Доступен после всех тем (0 из 10)

  12. Экзамен

    Доступен после зачёта

14 / 14

SOLID

Архитектура

Акроним из 5 принципов объектно-ориентированного проектирования: Single Responsibility (одна ответственность), Open-Closed (открыт для расширения, закрыт для изменения), Liskov Substitution (подстановка Барбары Лисков), Interface Segregation (разделение интерфейсов), Dependency Inversion (инверсия зависимостей).

Пример

Нарушение SRP: класс UserService делает запросы к БД, отправляет email, логирует. Правильно: разделить на UserRepository, EmailService, Logger.

Связанные термины

Coupling (Связность)

Архитектура

Мера зависимости между модулями. Низкая связность (loose coupling) — цель проектирования: модули минимально зависят друг от друга. Высокая связность усложняет изменения и тестирование.

Пример

Высокая связность: класс напрямую создаёт зависимости через new. Низкая: зависимости внедряются через конструктор (DI).

Связанные термины

Cohesion (Сцепление)

Архитектура

Мера того, насколько элементы модуля относятся к одной задаче. Высокое сцепление (high cohesion) — элементы тесно связаны по смыслу. Низкое — модуль делает несвязанные вещи.

Пример

Низкое сцепление: класс Utils с методами parseUser(), calculateTax(), sendEmail(). Высокое: класс UserParser только с методами парсинга пользователей.

Связанные термины

Deadlock (Взаимная блокировка)

Конкурентность

Ситуация, когда два или более потока блокируют друг друга, ожидая ресурсы, захваченные другими. Все потоки остаются заблокированными навсегда.

Пример

Поток 1 захватил lock A, ждёт lock B. Поток 2 захватил lock B, ждёт lock A. Deadlock! Решение: захватывать блокировки в одинаковом порядке.

Связанные термины

Race Condition (Состояние гонки)

Конкурентность

Ситуация, когда результат выполнения кода зависит от неупорядоченного доступа к общим данным из нескольких потоков. Приводит к недетерминированным багам.

Пример

Два потока читают balance=100, оба добавляют 50, оба пишут 150. Ожидалось 200, получилось 150. Решение: атомарные операции или блокировки.

Связанные термины

Optimistic Locking (Оптимистичная блокировка)

Базы данных

Стратегия контроля конкурентности, предполагающая, что конфликты редки. Проверяет, изменились ли данные перед записью (через version или timestamp).

Пример

UPDATE users SET balance=200, version=2 WHERE id=1 AND version=1. Если version изменился, запрос не затронет строк — значит, кто-то обновил данные.

Связанные термины

N+1 Query Problem

Базы данных

Проблема производительности ORM: 1 запрос для получения списка + N запросов для получения связанных данных для каждого элемента.

Пример

Получение 100 постов, затем 100 запросов для получения автора каждого поста. Решение: eager loading (JOIN).

Связанные термины

Idempotency (Идемпотентность)

API

Свойство операции давать одинаковый результат при однократном и многократном выполнении. Критично для API и распределённых систем.

Пример

DELETE /users/123 идемпотентен: первый вызов удаляет, последующие не меняют результат. POST не идемпотентен: каждый вызов создаёт новый ресурс.

Связанные термины

Rate Limiting (Ограничение частоты)

Масштабируемость

Механизм ограничения количества запросов от клиента за единицу времени. Защищает от DDoS, злоупотреблений, перегрузки.

Пример

100 запросов в минуту на IP. Превышение → HTTP 429 Too Many Requests. Алгоритмы: token bucket, sliding window, fixed window.

Связанные термины

Circuit Breaker (Автоматический выключатель)

Масштабируемость

Паттерн для обработки сбоев внешних сервисов. При множественных ошибках «размыкает цепь», временно блокируя вызовы, давая сервису время на восстановление.

Пример

После 5 ошибок за 10 секунд circuit breaker открывается, следующие 30 секунд все запросы сразу возвращают ошибку. Затем полуоткрытое состояние для проверки.

Связанные термины

Cyclomatic Complexity (Цикломатическая сложность)

Метрики

Метрика, измеряющая количество линейно независимых путей в коде. Равна числу точек ветвления (if, while, for, case) + 1. Высокая сложность усложняет тестирование.

Пример

Функция с 10 if имеет сложность 11. Рекомендуется держать сложность ≤ 10. Высокая сложность — сигнал к рефакторингу.

Связанные термины

Technical Debt (Технический долг)

Метрики

Накопленные проблемы в коде (костыли, отсутствие тестов, устаревшие зависимости), которые замедляют разработку в будущем. Как финансовый долг: нужно платить проценты (время на обход проблем).

Пример

Быстрое решение без тестов сэкономило 2 часа сейчас, но добавляет 30 минут на каждое изменение в будущем.

Связанные термины

Repository Pattern

Паттерны

Паттерн, абстрагирующий доступ к данным. Предоставляет коллекционно-ориентированный интерфейс (find, save, delete) и позволяет подменять реализацию (например, на мок в тестах).

Пример

UserRepository с методами find_by_id(), save(), delete(). В тестах подменяется на FakeUserRepository с данными в памяти.

Связанные термины

SQL Injection

Безопасность

Уязвимость безопасности, позволяющая злоумышленнику выполнить произвольный SQL-код через внедрение вредоносных данных в запрос. Возникает при конкатенации пользовательского ввода с SQL-запросом.

Пример

query = f"SELECT * FROM users WHERE id = {user_id}" — уязвимо. Нужно использовать параметризованные запросы: cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,)).

Связанные термины

Частые вопросы о курсе «Code Review Pro»

Состав курса, уровни, практика и способы проверки знаний.

Что входит в курс «Code Review Pro»?

Курс включает 10 тем и 80 вопросов с разбором ответа. Начать можно с первой темы курса.

Для какого уровня рассчитан курс «Code Review Pro»?

Маршрут охватывает уровни Middle, Senior. Темы расположены от основы к более сложным инженерным задачам, поэтому можно начать с подходящего места и не пропускать важные зависимости.

Как проверить, что материал усвоен?

После прохождения тем доступен зачёт по курсу «Code Review Pro» — 20 случайных вопросов с порогом 80%. После зачёта открывается экзамен с развёрнутыми ответами и автоматической оценкой, приближённый к техническому собеседованию.

Курс «Code Review Pro» бесплатный?

Да, курс полностью бесплатный: все 10 тем доступны без оплаты.

Курс, а не тренажёр

Этот курс даёт теорию: принципы, чек-листы, типы проблем и soft skills код-ревью — с уроками и тестами по темам. Если нужна практика на реальном коде — находить баги и уязвимости в конкретных фрагментах — для этого есть отдельный интерактивный тренажёр.

Перейти к тренажёру Code Review