Приведите пример постановки задачи.

«Приведите пример постановки задачи.» — вопрос из категории Софт-скиллы, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

В моей практике, когда я ставил задачу джуну на проекте по разработке микросервиса на Python, это выглядело так:

Контекст: "У нас в сервисе payment-processor есть проблема: при запросе истории платежей (GET /api/v1/payments) клиенты иногда получают таймаут, если у них очень много транзакций. Логи показывают, что проблема в медленном SQL-запросе к таблице payments."

Задача: "Необходимо оптимизировать endpoint /api/v1/payments. Критерий успеха — время ответа 95-го перцентиля (p95) должно быть ниже 500 мс при нагрузке в 100 RPS. Пользователи не должны замечать изменений в формате ответа."

Ожидаемый результат и шаги:

  1. Анализ: Проведи EXPLAIN ANALYZE текущего запроса, найди узкое место (скорее всего, отсутствие индекса или SELECT *).
  2. Решение: Предложи вариант оптимизации. Например:
    • Добавить составной индекс (user_id, created_at DESC).
    • Внедрить пагинацию с использованием LIMIT/OFFSET или ключа created_at.
    • Рассмотреть возможность денормализации или кэширования.
  3. Валидация: Напиши нагрузочный тест (с помощью Locust) для проверки, что p95 укладывается в 500 мс.
  4. Сроки и приоритет: Это задача среднего приоритета. Ожидаю, что анализ займет 1 день, реализация и тесты — еще 2. Готов обсудить твой план завтра утром."

Критерии приемки:

  • Endpoint возвращает данные в том же JSON-формате.
  • Пагинация реализована (если выберешь этот путь).
  • Нагрузочный тест подтверждает достижение целевого p95.
  • Код покрыт юнит-тестами, изменения в миграциях БД задокументированы.