Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 199новых вакансий за сутки·92 987вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 232
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 406 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 200
  • Облачные технологии14 156
  • QA вакансии3 463
  • Backend вакансии2 111
  • Инженер данных1 793
  • Продакт-менеджер1 238

Разработка

  • Android1 858
  • iOS1 696
  • Fullstack вакансии992
  • AI вакансии947
  • Frontend вакансии746
  • Mobile вакансии44

По стеку

  • Go8 727
  • Java6 581
  • Node.js2 034
  • .NET1 732
  • Kotlin1 619
  • Rust1 471
  • C#717
  • PHP692
  • C++580

DevOps и инфраструктура

  • Kubernetes7 781
  • DevOps вакансии6 080
  • Linux-инфраструктура5 503
  • Terraform / IaC4 281
  • CI/CD3 276
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность452

Аналитика и данные

  • Data Scientist1 133
  • Бизнес-аналитик919
  • Аналитик данных856
  • Системный аналитик154

Другие направления

  • Проджект-менеджер618
  • UI/UX дизайн147
  • Ручное тестирование14

По регионам

  • Вакансии в США43 898
  • Вакансии в Европе23 959
  • Вакансии в Канаде4 500
  • Работа в России3 878

По формату

  • Удалённые вакансии74 525
  • Релокация в США43 964
  • Гибридная работа12 465
  • Офисная работа7 103

По уровню

  • Senior вакансии42 298
  • Middle вакансии20 716
  • Junior вакансии6 689

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify36 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме ReactВсе вопросы
ReactMiddleОпыт

Расскажите о случае, когда вы улучшали performance, accessibility, testing или maintainability в проекте на React.

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Опишите конкретный случай: что измерили (Lighthouse, Coverage, axe), что изменили (мемоизация, lazy, семантика, тесты) и каков был измеримый результат — LCP, покрытие, оценка доступности.

Performance: устранение лишних ре-рендеров

На странице дашборда с таблицей из 500 строк замечены подвисания при фильтрации. Инструменты диагностики: React DevTools Profiler (вкладка «Flamegraph») и Chrome Performance panel.

// До: родитель ре-рендерится → все строки ре-рендерятся
function Dashboard({ data }: { data: Row[] }) {
  const [filter, setFilter] = useState("");
  const filtered = data.filter(r => r.name.includes(filter));
  return <Table rows={filtered} onSort={col => { /* inline */ }} />;
}

// После: стабильные ссылки + мемоизация дочернего
const MemoTable = memo(Table);

function Dashboard({ data }: { data: Row[] }) {
  const [filter, setFilter] = useState("");
  const filtered = useMemo(
    () => data.filter(r => r.name.includes(filter)),
    [data, filter]
  );
  const handleSort = useCallback((col: string) => { /* ... */ }, []);
  return <MemoTable rows={filtered} onSort={handleSort} />;
}

Результат: время рендера при вводе фильтра снизилось с 180 мс до 12 мс по данным Profiler.

Подход к улучшению качества React-проекта

Улучшение любого аспекта — performance, accessibility, testing или maintainability — начинается с измерения исходного состояния. Без базовых метрик невозможно оценить результат. Ниже разобран реальный сценарий по каждому направлению.

Accessibility: аудит и правки

Запуск axe-core через @axe-core/react в dev-режиме выявил: отсутствие aria-label у иконок, некорректный heading order, отсутствие role="alert" у toast-уведомлений.

// Было
<button onClick={onClose}><CloseIcon /></button>

// Стало
<button onClick={onClose} aria-label="Закрыть диалог">
  <CloseIcon aria-hidden="true" />
</button>

// Toast с правильным role
<div role="alert" aria-live="polite">{message}</div>

После правок Lighthouse Accessibility score вырос с 71 до 98.

Testing: переход с enzyme на React Testing Library

Старые тесты проверяли внутреннее состояние компонентов через wrapper.state() — хрупкий подход, ломавшийся при любом рефакторинге.

// Было (enzyme, тест внутренней реализации)
expect(wrapper.state("isOpen")).toBe(true);

// Стало (RTL, тест поведения)
import { render, screen, userEvent } from "@testing-library/react";

test("открывает меню по клику", async () => {
  const user = userEvent.setup();
  render(<Dropdown label="Меню" items={["Профиль", "Выход"]} />);
  await user.click(screen.getByRole("button", { name: "Меню" }));
  expect(screen.getByRole("menuitem", { name: "Профиль" })).toBeVisible();
});

Покрытие выросло с 34% до 78%, при этом тесты стали устойчивее к рефакторингу.

Maintainability: выделение кастомных хуков

Логика загрузки данных дублировалась в 12 компонентах. Вынесена в useFetch:

function useFetch<T>(url: string) {
  const [data, setData] = useState<T | null>(null);
  const [error, setError] = useState<Error | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const controller = new AbortController();
    fetch(url, { signal: controller.signal })
      .then(r => r.json())
      .then(setData)
      .catch(e => { if (e.name !== "AbortError") setError(e); })
      .finally(() => setLoading(false));
    return () => controller.abort();
  }, [url]);

  return { data, error, loading };
}

Подводные камни

  • memo без useCallback — обернуть компонент в memo, но передавать inline-функцию prop'ом бессмысленно: новая ссылка на каждый рендер ломает мемоизацию.
  • useMemo для всего подряд — мемоизация сама по себе имеет стоимость; профилируйте перед применением, не добавляйте «на всякий случай».
  • axe-core ловит не все a11y-проблемы — автоматические инструменты находят ~30–40% нарушений WCAG; ручное тестирование с клавиатурой и скринридером обязательно.
  • Testing Library и async — забыть await перед user.click() из userEvent.setup() приводит к непредсказуемым падениям тестов.
  • Coverage как цель — 100% coverage не равно качеству тестов; важнее тестировать критические сценарии, а не гнаться за числом.
  • Рефакторинг без тестов — вынос логики в хуки без предварительных тестов превращает улучшение maintainability в источник регрессий.
  • AbortController не везде — без отмены запроса при размонтировании компонента возможен setState on unmounted component — утечка памяти.

Что портит ответ

  • Выдумывать опыт или говорить слишком общими фразами
  • Не объяснять свою личную роль в работе с React
  • Не показывать результат, метрики или извлечённые уроки

Что слушает интервьюер

  • Может подготовить честный пример использования React
  • Показывает свою роль, решения и результат
  • Умеет рефлексировать над trade-offs и уроками

Как вы знаете этот вопрос?

Проверить себя по теме React →
←Предыдущий вопросЧто такое контролируемые (controlled) и неконтролируемые (uncontrolled) компоненты в формах?Следующий вопрос→Что такое хук useReducer? Когда его предпочесть useState?

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

Reactexperience-storytellingtechnical-communicationtechnology-selectiontrade-off-analysis

Частые вопросы на собеседовании

  • Что такое хук useEffect и как работает его массив зависимостей?
  • Объясните хук useState. Какие типичные ошибки возникают при обновлении состояния?
  • Объясните правила хуков. Почему хуки нельзя вызывать условно?
  • В каких типах frontend-проектов React даёт реальный выигрыш, а где будет избыточен или неудачен?