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

+1 467новых вакансий за сутки·93 721вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

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

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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

Вакансии с этим навыком

React вакансии
  • Fullstack-разработчик (Middle+ / Senior)
  • Fullstack-разработчик
  • Senor Scala Engineer (#6032)
  • Engineering Manager, Developer Infrastructure
  • Propulsion Software Engineer (Falcon Engineering)

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

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