Работа в CSSSR

Middle JavaScript-разработчикДистанционно и на фуллтайм

Мы ищем крепкого middle JS‑разработчика. Вы станете частью сильной и дружной команды. Руководит командой тимлид, который не оставит без внимания ни одного члена экипажа. В одной шеренге с вами будут идти коллеги, всегда готовые подстраховать, помочь или научить. Объединяет команду заботливый менеджер.

Что нужно делать:

  • разрабатывать веб‑приложения;
  • учиться у сильных, помогать слабым и делиться знаниями;
  • работать: много и хорошо.

Стек технологий:

  • JavaScript, TypeScript (как преимущество);
  • уверенное знание одного из фреймворков: React — Flux (Redux), React Native, Angular 1, Angular 2+;
  • знание двух и более фреймворков будет большим плюсом;
  • Babel (ES 2016+);
  • Webpack или Gulp;
  • Git;
  • БЭМ.

Кроме того, горячо приветствуем:

  • умение работать в команде;
  • технический и аналитический склад ума;
  • здоровый перфекционизм.

Взамен мы гарантируем:

  • возможности для карьерного и профессионального роста;
  • коллектив, который всегда готов помочь и поддержать;
  • адекватное руководство и четко выстроенные процессы;
  • интересные задачи и проекты, реализацией которых вы будете гордиться;
  • удалённую работу с графиком 10–19 по Москве;
  • конкурентную зарплату, официальное трудоустройство и честные правила игры;
  • никто не будет стоять за спиной и смотреть, как вы кодите.

P. S. Для москвичей предлагаем вакансии в московских офисах компаний-партнёров.

P. P. S. Подсказка для самых внимательных и любопытных.

Тестовое задание

Мы приготовили для вас четыре небольших кейса. Сделать нужно хотя бы один.

React

Slomux — упрощённая, сломанная реализация Flux.

Перед вами небольшое приложение, написанное на React + Slomux.

Исправьте ошибки и потенциально проблемный код, почините приложение и прокомментируйте своё решение.

~ 25 минут
потребуется на решение
~ 25 минут
потребуется на решение

Angular 1

1. Реализуйте таймер обратного отсчёта. Формат — два знака после запятой. В конце работы таймер должен вызывать колбэк onFinish с параметром $endTime, куда будет передан new Date().

Ожидаемый результат .

2. Исправьте отображение статуса. В чём была проблема?

3. Попробуйте добавить 100 таймеров на страницу. Есть ли проблемы с производительностью таймеров? Если есть, то с чем они связаны и как их решить?

~ 15 минут
потребуется на решение
~ 15 минут
потребуется на решение

Angular 2

Суть: приложение реализует таблицу, которую получает через «ApiService» (его реализацию изменять не нужно). Каждые 5 секунд сервис присылает один и тот же пересортированный список.

Проблема: при пересортировке слетает значение, введённое в поле «Note».

Задача: нужно сделать так, чтобы введённое значение после пересортировки сохранилось на строке с тем же номером (№), что и до сортировки.

Актуальное поведение

Ожидаемое поведение

Нужно исправить проблему и написать в комментариях, в чём она заключалась.

После внесения изменений не забудьте сохранить (ctrl+s либо кнопка сохранения), затем нажмите кнопку «Share», скопируйте оттуда «Editor url (also works on Medium)» и пришлите его нам.

Дополнительное задание, которое сократит количество вопросов на собеседовании: как можно оптимизировать AppComponent с точки зрения работы change-detection? Реализуйте предложенную оптимизацию и расскажите об одном или нескольких способах оптимизации в комментарии.

~ 15 минут
потребуется на решение
~ 15 минут
потребуется на решение

React Native

BadNative — это простой компонент, который умеет отображать список данных с элементами, но делает это криво, вызывая торможение и плохую отзывчивость.

Ваша задача: переписать компонент таким образом, чтобы:

— он научился выводить список через Section List;

— появилась форма ввода для пользователя;

— компонент умел быстро искать данные по списку, исходя из того, что введёт пользователь в эту форму;

— список сортировался при вводе;

— элементы списка группировались в секции по первой букве;

— был реализован счётчик элементов секции;

— у пользователя была возможность очищать форму поиска, при этом список возвращался в предыдущее состояние.

~ 20 минут
потребуется на решение
~ 20 минут
потребуется на решение

Расскажите о себе

Дополнительные способы связи: