учебный путь · python

Python: продвинутая практика

  • Python
  • Продвинутый
  • 15 модулей
  • 69 задач
  • 3 задач · бесплатно до модуля 1 из 15

Прикладной Python после основ: разбор форматов, декомпозиция логики, значения-объекты с операторами — и дальше в продакшен-механику: диспетчеры правил, кэш с вытеснением, парсеры запросов, деньги до копейки. Каждая задача самостоятельна и решается с нуля, без сквозного проекта.

AI-ассистент ведёт подсказками, но решение не выдаёт
intro

Что тебя ждёт в этом пути

Автор программы:

Что ты построишь

69 решений на Python в 15 паках продакшен-механики: LRU-кэш с вытеснением, идемпотентное списание денег, размыкатель цепи, адаптивный предел одновременных запросов, разбор cron-выражения. Первый пак, «Основной блок» из трёх задач, бесплатный, остальные 14 премиум: биллинг, надёжность, согласованность, наблюдаемость, безопасность, справедливое распределение ресурсов, пропускная способность, потоки данных, время и расписания, графы зависимостей и границы процесса. Задачи самостоятельны, без сквозного проекта: каждую решаешь и запускаешь в браузере, а судья гоняет её на скрытых входных данных.

Для кого

Для тех, кто уже пишет на Python и хочет отработать задачи уровня продакшен-бэкенда: не синтаксис, а компромиссы систем, гонки, отказоустойчивость, деньги без потери копейки. Уровень пути hard, входной порог заметно выше базового курса. Подойдёт, если хочешь порешать то, что реально встречается в highload-сервисах, а не олимпиадные головоломки.

Что нужно знать до старта

  • Уверенно писать функции и работать со списками, словарями и исключениями
  • Понимать изменяемость объектов и уметь читать код со стандартной библиотекой Python

Чему научишься

  • Проектировать идемпотентные операции списания денег и кэши с вытеснением
  • Собирать размыкатель цепи и повторы с растущей паузой для сбойных зависимостей
  • Считать перцентили и кардинальность метрик без хранения сырых измерений
  • Разбирать пользовательский ввод и заголовки без рассинхрона с прокси и сервером
  • Распределять ёмкость по весам и не давать шумному соседу забрать общий пул
  • Строить устойчивый порядок сборки и находить циклы в графе зависимостей
  • Разбирать CSV с кавычками, cron-выражения и слоёные конфиги с происхождением значений
curriculum

Задачи пути — 15 модулей, 69 задач

Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.

69 задач · 15 модулей
1.1
Разбор длительности
Переведите строку вида 1h30m в общее число секунд, отклоняя неверный формат
1.2
Лимитер запросов
Соберите скользящее окно из трёх функций: очистка истории, проверка лимита и запись запроса fail-closed
1.3
Версия релиза
Соберите значение-объект Version с разбором из строки, сравнением по числам и хешируемым равенством
2.1
Вычисление фич-флага
Соберите диспетчер фич-флагов: boolean, процентный раскат, allowlist и проверка атрибута, с честным отказом на неизвестном типе правила
2.2
LRU-кэш с вытеснением
Соберите LRU-кэш фиксированной ёмкости: get/put обновляют свежесть, переполнение вытесняет давно не использованную запись
2.3
Парсер поискового фильтра
Разберите строку поиска в список фильтров: пары поле:значение, фразы в кавычках с экранированием и отрицание через дефис
2.4
Стек с минимумом
Реализуйте MinStack: push/pop/top/min все за O(1), минимум не теряется при удалении текущего минимума
2.5
Слияние временных окон
Реализуйте validate_windows/merge_windows/total_coverage и оркестратор coverage_report: слияние перекрывающихся интервалов обслуживания
3.1
Пересчёт при смене тарифа
Посчитайте счёт за период, в котором тариф менялся, не потеряв ни копейки на округлении
3.2
Идемпотентное списание
Списывайте деньги ровно один раз на ключ идемпотентности, даже когда запрос приходит дважды
3.3
Списание из корзин кредитов
Соберите план списания так, чтобы сгорающие кредиты уходили первыми, и всё-или-ничего
3.4
Даты расчётного цикла
Выдавайте даты списания бесконечно, не давая дню привязки залипнуть после короткого месяца
3.5
Кампания дожима платежа
Прогоните неудавшееся списание через повторы с растущими паузами и решите, когда закрывать подписку
4.1
Размыкатель цепи
Перестаньте добивать упавшую зависимость: разомкните цепь и пустите ровно один пробник после паузы
4.2
Повторы с отступом
Соберите декоратор, который повторяет только сетевые сбои, удваивая паузу до потолка
4.3
Бюджет дедлайна
Раздайте таймауты по цепочке вызовов так, чтобы необязательный шаг не съел время обязательного
4.4
Деградация ответа
Соберите ответ из полей, часть которых не доехала, по стратегии на каждое поле и бюджету на весь ответ
4.5
Вердикт здоровья с гистерезисом
Не давайте сервису мигать: меняйте вердикт по серии проб, с разными порогами вниз и вверх и выдержкой снизу
5.1
Хранилище с версиями
Не дайте второму сохранению затереть первое: пачка записей применяется целиком или не применяется вовсе
5.2
Разгребание исходящей очереди
Держите порядок событий по каждому ключу и находите разрывы, из-за которых получатель увидел их не по порядку
5.3
Возобновляемый бэкфилл
Соберите курсор, с которым упавший бэкфилл продолжится без пропусков и повторов даже на одинаковых отметках времени
5.4
Слияние конкурирующих правок
Сливайте правки по полям так, чтобы реплики сходились к одному состоянию при любом порядке обмена
5.5
Сверка реестров
Пройдите два отсортированных реестра разом и разложите расхождения по видам, не собирая их в память
6.1
Перцентили задержек
Считайте перцентили из счётчиков корзин, не храня ни одного измерения, и не завышайте их до границ
6.2
Кардинальность меток
Удержите число временных рядов в бюджете, схлопывая лишнее в общую серию, а не выбрасывая его
6.3
Семплер трейсов
Решайте судьбу трейса по его идентификатору, а не монеткой, и подстраивайте долю под нагрузку прошлого окна
6.4
Скорость по окну
Считайте запросы в секунду по счётчику, который умеет перезапускаться, и не рисуйте отрицательную нагрузку
6.5
Правила алертов
Поджигайте алерт только после выдержки и не долбите повторами — одна машина состояний на все условия
7.1
Области путей
Проверяйте не строку пути, а место, куда он приводит, и выбирайте самое точное из выданных прав
7.2
Проверка токена
Проверьте подпись раньше всего остального и сузьте права токена до тех, что реально есть у клиента
7.3
Секреты в логах
Пишите в лог только разрешённые поля и возвращайте пути незнакомых, чтобы новое поле не утекло молча
7.4
Защита входа от перебора
Закрывайте ключ нарастающими блокировками, которые снимает тишина, а не удачный вход
7.5
Заголовок авторизации
Разберите заголовок посимвольно и отвергните всё, что прокси и сервер прочитают по-разному
8.1
Доля по весам
Разделите ёмкость по весам так, чтобы излишек скромного арендатора не пропал, а достался остальным
8.2
Карусель с накоплением
Делите очередь по весу, а не по числу заданий: недобранное переносится, а простой обнуляется
8.3
Старение приоритетов
Не дайте фоновой задаче голодать под потоком срочных: срочность растёт с ожиданием, но не выше порога
8.4
Приём по дедлайнам
Берите заказ, только если весь ранее обещанный набор всё ещё укладывается в свои сроки
8.5
Переборки в общем пуле
Резерв на клиента плюс общий остаток: шумный сосед не заберёт пул целиком, а тихий не потеряет свои слоты
9.1
Сброс нагрузки с гистерезисом
Два порога вместо одного: сброс включается на верхнем, выключается на нижнем и не дребезжит между ними
9.2
Пачки по размеру или возрасту
Пачка уходит, когда набралась или когда старшая запись заждалась — и возраст считается от той, что пачку открыла
9.3
Склейка запросов в полёте
Сорок одинаковых запросов — один поход за данными: остальные ждут ответ, а сверх группы отбиваются
9.4
Выдача устаревшего при обновлении
Два окна вместо срока годности: пока запись обновляют, её всё ещё отдают — и обновлять уходит ровно один
9.5
Адаптивный предел одновременных запросов
Предел двигается сам: вверх по единице за окно успехов, вниз вдвое сразу — подниматься осторожнее, чем падать
10.1
Слияние отсортированных источников
Слейте отсортированные порознь логи в одну ленту, держа в памяти по одной записи на источник
10.2
Отсев повторов по окну
Отсейте повторы из бесконечного потока, помня последнее окно, а не всё виденное
10.3
Витрина лучших из потока
Соберите десятку лучших из миллионов записей, держа в памяти только саму десятку
10.4
Частые ключи в ограниченной памяти
Найдите самые частые ключи потока, держа фиксированное число счётчиков и зная, насколько они врут
10.5
Резервуарная выборка
Наберите честную выборку постоянного размера из потока, длину которого узнаете только в конце
11.1
Часы SLA по рабочему календарю
Считайте срок рабочими минутами: ночи, выходные и праздники бюджет не тратят
11.2
Расписание через перевод часов
Ночная задача не должна пропасть в несуществующий час и не должна сработать дважды в удвоенный
11.3
Ежемесячное правило повторения
Разверните «31-го числа каждый месяц» в даты так, чтобы февраль не сломал ни счёт списаний, ни привычную дату
11.4
Выровненные окна отчётности
Режьте поток на периоды со сдвинутым началом так, чтобы пустой период было видно, а не потеряно
11.5
Разбор и сопоставление cron
Разберите выражение cron и не попадитесь на правиле, где два дневных поля соединяются через ИЛИ
12.1
Разбор CSV с кавычками
Разберите строку выгрузки так, чтобы адрес с запятой и цитата внутри значения не разваливали таблицу
12.2
Каноническая форма для подписи
Соберите значение в одну-единственную строку, чтобы подпись сходилась у обеих сторон
12.3
Слоёные настройки с происхождением
Слейте умолчания, файл и окружение так, чтобы флаг не сносил раздел, и покажите, откуда взялось каждое значение
12.4
Экранирование по месту вставки
Одного экранирования не бывает: текст, атрибут и адрес требуют разного, а незнакомое место не подставляется вовсе
12.5
Человеко-читаемые размеры
Читайте 1.5GiB точно, различайте 1024 и 1000 и отвергайте то, что в целых байтах не выражается
13.1
Разбор командной строки
Разберите аргументы так, чтобы файл с именем -report и число -1 не превращались в опции
13.2
Атомарная замена файла
Замените содержимое так, чтобы падение посреди записи оставило старый файл целым, а не половину нового
13.3
Владение на срок с номером
Единственный исполнитель без вечного залипания: срок забирают по истечении, а вернувшийся с того света владелец отбивается по номеру
13.4
Остановка со сливом
Остановитесь по сигналу: не берите новое, дайте доработать начатому и назовите то, что пришлось бросить
13.5
Коды возврата
Закончите работу кодом, который конвейер прочтёт верно: без потери в младшем байте и без путаницы с гибелью от сигнала
14.1
Устойчивый порядок сборки
Постройте порядок, одинаковый от прогона к прогону, и назовите цикл путём, а не фактом
14.2
Обратное влияние изменения
Посчитайте, что пересобирать после правки, идя против стрелок зависимости, и выбросьте лишние запуски
14.3
Разрешение версий
Выберите версии, подходящие под все требования, и назовите конфликт вместе с теми, кто его создал
14.4
Критический путь сборки
Найдите цепочку, задающую время сборки, и покажите, у каких шагов есть запас, а у каких нет
14.5
Клубки зависимостей
Отчитайтесь не «где-то цикл», а «вот эти четыре модуля ходят по кругу» — и стяните клубки в граф без циклов
15.1
Запрет перебивает разрешение капстоун
Решите доступ так, чтобы точечное разрешение не снимало общий запрет, и назовите правило, принявшее решение
Путь входит в Koddo Premium Открой все премиум-пути, AI-ассистента без лимитов и daily challenge. от 490 ₽ / мес
koddo start python-for-intermediate

Готов начать этот путь?

Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.