ДемоДані вигадані. У справжньому відборі до звіту додаються запис і розшифровка.
Звіт по кандидату

Middle Frontend Engineer (React / Node)

Питальник і рубрика складені спеціально під вашу роль.

Кандидат
A
Дата
11.08.2026
Тривалість
48:12
Питань
8
Вимірів
7
Сторінка
1 з 6
Вердикт
Запросити далі
4.3/ 5

Сильний кандидат. Тримає і продукт, і техніку: пояснює, чому обрав рішення, а не лише що зробив. Єдина просадка — робота з даними під навантаженням, але помилку побачив сам і виправив у розмові.

Оцінка за рубрикою

У порядку розмови.

планка ролі — 3 з 5
01ПроєктНазвав користувача, цифру і свій шматок5Деталі +Згорнути −
Питання · 04:10–11:20

Розкажіть про останній проєкт: для кого він, що там було вашою частиною і як ви розуміли, що вийшло.

Почав не з технологій, а з користувача і з цифри, яку рухали. Свою частину відділив від командної без прикрашань: сказав, де тільки допомагав.

Чому 5. Пояснив не лише що зробив, а чому саме так, і сам назвав, що б переробив зараз.
02React / станФільтри в URL, сервер і клієнт розділені4Деталі +Згорнути −
Питання · 11:20–18:05

Список із фільтрами і пагінацією. Що тримаєте в стані компонента, що в URL, що на сервері?

Фільтри поклав в URL, щоб посилання можна було переслати — назвав це першою причиною, а не наслідком. Серверні дані й локальний стан форми тримає окремо.

Чому 4, а не 5. Про інвалідацію кешу після зміни одного запису відповів загально: «перезапитаю список». Точкове оновлення не згадав. Питання на онсайт нижче.
03Async / UX400, 401 і мережу розвів окремо5Деталі +Згорнути −
Питання · 18:05–24:40

Запит на сервер упав. Що бачить користувач?

Розвів помилки за змістом, а не за кодом: 400 — показати, що саме не так у полі; 401 — тихо відправити на логін і зберегти введене; обрив мережі — залишити дані у формі й дати повтор.

Чому 5. Сам згадав, що подвійний клік на «Зберегти» треба блокувати, і що спінер без тексту гірший за нічого.
04КодСпершу прохід на кожну групу, потім переписав на один3Деталі +Згорнути −
Питання · 28:30–37:00

Масив записів: згрупувати за полем і порахувати кількість у кожній групі. 8 хвилин у спільному редакторі.

Перша версія: зібрав унікальні значення поля і по кожному ще раз пройшовся масивом. Працює, але це окремий прохід на кожну групу — обидві версії коду нижче на сторінці.

Після питання про обсяг побачив проблему сам, без підказки в бік конкретного методу, і переписав на один прохід з накопиченням в обʼєкт.

Порожній масив згадав сам; запис без потрібного поля обробив після нагадування.

«А, ну да… якщо їх сто тисяч, то я по масиву ходжу стільки разів, скільки груп. Тупо виходить.»

33:15 · кандидат
Чому 3, а не 4. Перший варіант доїхав би до код-ревʼю. Але виправив швидко і пояснив причину своїми словами — це розуміння, а не завчений патерн.
05ДебагПочав з відтворення, не з коду4Деталі +Згорнути −
Питання · 37:00–42:30

Баг, який відтворюється тільки в продакшені і тільки в частини користувачів. Ваші перші кроки?

Не пішов одразу в код: спершу знайти, що спільного в тих користувачів, і звузити до релізу. Згадав, що варто спитати підтримку, а не тільки дивитись логи.

Чому 4, а не 5. Про трейси і фіче-флаги не згадав — дійшов до серверних логів і зупинився там.
06OwnershipШукає, де люди відвалюються, замість тижня верстки5Деталі +Згорнути −
Питання · 42:30–45:40

Вам кажуть: «конверсія в онбордингу низька, зроби щось». З чого починаєте?

Першим питанням пішов у дані: на якому кроці люди відвалюються. Тільки після цього говорив про інтерфейс — і сам сказав, що тиждень верстки без цієї цифри може нічого не змінити.

Чому 5. Звів нечітку задачу до одного експерименту, який можна зробити за два дні.
07КомунікаціяСтруктурно, чесне «не знаю»4Деталі +Згорнути −
Оцінюється по всій розмові

Тримає структуру: спочатку відповідь, потім обґрунтування. Двічі сказав «не знаю» і одразу додав, як перевірив би — це рідше, ніж здається.

Чому 4, а не 5. У задачі на код кілька хвилин думав молча, не озвучуючи хід думки.

Нижче планки не впав жоден вимір; найближче до межі — код.

Як складалась оцінка

Перші три пункти

Проєкт і фундамент — сильні: говорить про користувача й цифри, помилки сервера розводить за змістом. Гіпотеза після першої третини — рівень вищий за junior.

Задача і сценарії

Редактор показав межу — тому за код 3. Далі гіпотеза підтвердилась: дебаг починає з відтворення, нечітку задачу зводить до одного експерименту. Середній бал — 4.3.

Доказ · пункт 04 · код

Видно не результат, а як кандидат до нього доходить.

Згрупувати записи і порахувати кількість — 8 хвилин у спільному редакторі.

Перша версія
const roles = [...new Set(users.map(u => u.role))];
const grouped = {};
for (const role of roles) {
  grouped[role] = users.filter(u => u.role === role).length;
}
  1. Працює. А якщо тут не десять записів, а сто тисяч?

  2. Ну… воно все одно порахує. Просто… а, ну да. Я ж для кожної ролі ще раз по всьому масиву проходжу.

  3. Тупо виходить. Давайте я один раз пройду і буду складати в обʼєкт.

Після питання про обсяг
const grouped = {};
for (const user of users) {
  const role = user.role ?? "unknown";
  grouped[role] = (grouped[role] ?? 0) + 1;
}
  1. Тепер один прохід, скільки б записів не було. А якщо в когось поля немає — кладу його в unknown, щоб запис не загубився.

Питання на онсайт

Щоб закрити прогалини до 5.

Чотири теми, які лишились відкритими після інтервʼю. Нижче — що має прозвучати у відповіді, щоб вимір закрився на 5.

React / стан

Користувач змінив один запис у списку. Які запити перезапитуєш, а які лишаєш, і чому?

на 5Назве точкове оновлення кешу і скаже, коли повний refetch дешевший за ручну синхронізацію.
Код

Таблиця на 200 тисяч рядків з фільтром і сортуванням. З чого почнеш?

на 5Заговорить про пагінацію чи віртуалізацію до того, як напише перший цикл, а не після питання про обсяг.
Дебаг

Клієнт бачить помилку, у консолі й у логах чисто. Куди дивишся далі?

на 5Серверні логи, трейси, фіче-флаги — і як звузити проблему до конкретного релізу.
Проєкт

Відкрий свій репозиторій і проведи по одному рішенню: чому саме так.

на 5Код збігається з розповіддю, і він сам показує місце, яке переписав би сьогодні.

Що додається до звіту

  • Запис розмови 48:12
  • Розшифровка з таймкодами — кожну цитату можна перевірити
  • Код, який кандидат писав під час інтервʼю
  • Питальник і рубрика — ті самі для всіх кандидатів на цю роль · як збирається питальник

Рішення про найм — за вами. Звіт — перший фільтр: на кого варто витрачати час команди далі.

Чому однакові питання дають точніший висновок, ніж вільна розмова — про метод.

Якщо кандидатів кілька

По кожному — такий самий звіт. Питання й рубрика одні, тому цифри можна порівнювати. Кандидат A з цього звіту — перший рядок.

Кандидат
Проєкт
React
Async
Код
Дебаг
Own.
Комун.
Вердикт
Кандидат A
5
4
5
3
4
5
4
Далі
Кандидат B
4
4
4
4
3
3
4
Далі
Кандидат C
3
3
4
3
4
3
3
Під питанням
Кандидат D
3
2
3
2
3
4
4
Під питанням
Кандидат E
2
2
2
2
2
3
3
Відмова

Такий звіт — по кожному з пʼяти кандидатів. З відео, розшифровкою і кодом.

Надіслати колезі
Shortlist · FounderSide