Take-home задание и code review на интервью

↑ 9.2 Финальная подготовка: live coding и вопросы · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: senior

Зачем это на собесе

Take-home показывает реальный стиль работы: код, структуру, тесты, коммуникацию.

Take-home

Небольшая задача, которую делают дома (обычно 2–4 часа).

Как выполнять

  1. Прочтите условие дважды, выпишите требования и допущения; задайте вопросы, если можно.
  2. План и границы (что делаете, что осознанно нет).
  3. Структура проекта чистая, понятная, без излишеств.
  4. Работающее решение важнее «вау»; запуск одной командой.
  5. Тесты на ключевую логику.
  6. README: как запустить, какие решения приняты, что улучшили бы при большем времени, известные ограничения.
  7. История коммитов осмысленная.
  8. Доступность, обработка ошибок, состояния загрузки и пустоты.
  9. Не копируйте чужой код без понимания; будьте готовы объяснить каждое решение.

Что оценивают

КритерийПризнаки
Корректностьвыполнены требования, граничные случаи
Дизайн кодадекомпозиция, ответственности, типы
Качествотесты, линтер, ошибки
UXсостояния, доступность, адаптивность
КоммуникацияREADME, допущения, компромиссы
Соразмерностьбез over-engineering

Ловушки

  • переусложнение (зачем Redux для формы);
  • нарушение лимита времени: лучше уложиться и описать, что бы улучшили;
  • отсутствие запуска инструкции;
  • отсутствие тестов, игнорирование требований.

Code review на интервью

Вам дают код (PR) и просят провести ревью.

Подход

  1. Контекст: что делает, для чего.
  2. Корректность: ошибки, крайние случаи, гонки, утечки.
  3. Дизайн: структура, ответственность, связность.
  4. Безопасность: XSS, секреты, валидация.
  5. Производительность: лишние ререндеры, запросы.
  6. Тесты, читаемость, стиль (последним).
  7. Приоритизация: blocker / suggestion / nit.
  8. Тон: вопросы и предложения, а не приказы; отмечайте хорошее.

Пример комментариев

[blocker] fetch без обработки ошибки: при 500 UI останется в loading. Предлагаю try/catch и состояние ошибки.
[suggestion] Вынести запрос в composable useOrders: пригодится на странице списка.
[nit] Имя `data2` лучше заменить на `filteredOrders`.
[question] Почему ключ списка — index? Порядок меняется при сортировке.
[+] Хорошо, что валидация вынесена в отдельную функцию.

Что типично «зашивают» в тестовый код

Забытый await, мутация props, отсутствие key, v-html с пользовательским вводом, утечка подписки, N+1 запросов, гонки при быстром вводе, неверные зависимости watch, отсутствие отмены запросов, секреты в коде.

Вопросы с ответами