Как подготовиться к собеседованию на позицию Middle JavaScript FullStack
Рассматривать буду стек технологий Node.js/Express + ReactJS, т.к. в последнее время прошел немалое количество собеседований на подобные вакансии.
Часть первая. Интервью с HR.
Интервью с HR подразумевает общий сбор информации о вас, как о возможном работнике компании. Вопросов по технической части тут не будет, только про ваш опыт, ожидания от работы и мотивацию.
Самое главное — дать понять что вам интересна работа в этой компании/над данным проектом и что вы владеете в нужной мере всем тем, чего требует эта вакансия.
Рассмотрим план интервью HR:
“Сейчас я расскажу о компании и должности, а потом вы расскажете о своем опыте” — стандартная процедура на всех интервью. Постарайтесь внимательно послушать чем предстоит заниматься и отразить весь ваш связанный с этим опыт в ответе на вопрос о своем опыте. Не забудьте упомянуть, если вы обучаетесь каким-то новым технологиям/аспектам, это может быть полезно если в компании используется что-то подобное.
“Теперь я задам вам пару вопросов на английском...” — если вакансия предполагает знание английского, то будьте готовы к тому, что часть всех этапов собеседования, либо же вообще все из них будут проводиться на нем. В большинстве случаев Intermediate уровня бывает вполне достаточно.
Вопросы о проектах (могут быть в предыдущем этапе, либо же отдельно) — вас будут спрашивать о том, каким проектом вы гордитесь, какой самый сложный функционал реализовывали, какие технологии применяли, что узнали в процессе и т.п. Тут самое важное — понять, что от вас хотят узнать не каким образом вы пишете генераторы покемонов, а как умеете решать возникшие проблемы и в контексте каких технологий.
“На какую зарплату вы расчитываете?” — нет смысла дешевить и бояться что сумма будет выше той, которую вам готовы заплатить. В 98% случаев зарплатная вилка на вакансию является приватной информацией. Также, названная вами сумма будет рассматриваться только в том случае, если на техническом интервью вы покажете соответствующий уровень знаний. В ином случае вам сообщат ту сумму, которую вам готовы платить и вы должны будете решить, подойдет она для вас или нет (при условии что вы по прежнему будете подходить на эту должность).
“У вас есть какие-нибудь вопросы?” — не задавать никаких вопросов очень плохая идея сразу по двум причинам: вы показываете что вам не интересно и вы не узнаете некоторых важных ньюансов, пока не поработаете там (и которые могут оказаться критичными для вас и отобрать кучу времени). Список вопросов которые необходимо задать: график работы (гибкий? 40 часов в неделю? выходные, праздники?), команда (кол-во специалистов? стэк? нужно ли общаться с клиентом? подразумевается ли карьерный рост?), проекты (примеры проектов, задач? с чем придется работать? что придется выучить?).
Подведем итог: интервью с HR дает работодателю понимание вас, с точки зрения психологии и дополнительно дает некоторую информацию для последующих собеседований (стек, портфолио, опыт).
Часть вторая. Техническое собеседование.
Техническое собеседование чаще всего проводит какой-нибудь Senior/Techlead из компании, который, скорее всего, не будет являться вашим прямым начальником на этой должности. Также, в 90% случаев, ему просто дают список вопросов по которым нужно погонять собеседуемого и список баллов за ответ по каждому из них, так что собеседовать вас — это не его прямая обязанность.
В основном, техническое интервью состоит только из шаблонных вопросов и задачек, так что, чтобы его пройти, нужно будет иметь хорошую теоретическую подготовку и глубокое знание используемых технологий.
Мы рассмотрим основные и самые частые вопросы по: JavaScript, Node.js, React и алгоритмам.
Вопросы по JavaScript:
Какие основные типы значений есть в JS? — String, Number, Boolean, Object, Undefined, Symbol, Functions, Array. Обратите внимание что тут нет таких типов как: integer, float, double. Все это — Number.
Есть ли какая-то методика, чтобы скрыть части объекта от внешнего мира? — на этот вопрос всего есть 3 ответа, но основной, который от вас хотят услышать — это замыкания. Проще говоря, это область видимости переменной: объявленная в функции переменная будет доступна только дочерним элементам этой функции. Второстепенный ответ (важен, если собеседование подразумеват знание React) — это Computed Properties. Props — это некий объект, содержащий различные значения, которые можно достать по ключу.
Зачем нужны асинхронные функции и какие в JS есть средства для работы с ними? — асинхронные функции созданы для того, чтобы отложить выполнение операции и не забивать ей поток. В качестве средств можно упомянуть: Promise, async/await, Generator, setInterval/setTimeout, callbacks.
JS реализует протоипное наследование. В чём его отличия от классического, преимущества и недостатки, что лучше? — классическое наследование определяет статичную иерархию (изменение невозможно), когда прототипное наследование позволяет объявлять ее динамично и изменять в рантайме. Но за счет этого возможны просадки в производительности.
Вопросы по алгоритмам:
Зачем нужно внедрение зависимостей (dependency injection), как его реализовать и какие примеры реализации знаешь? — внедрение зависимостей нужно для передачи управления потоком. Реализация происходит через написание некого wrapper’a, который будет расширять аргументы другого компонента, чаще всего это происходит с применением каррирования. Самые известные реализации — HoC (High-order Components) из React или же Hooks, которые стали им заменой в последнем обновлении и connect из Redux.
Как работают функции map, filter, reduce и для чего они нужны? — https://learn.javascript.ru/array-iteration
Вопросы по Node.js:
Node базируется на кроссплатформенной библиотеке libuv. За что она отвечает, какой паттерн реализует? Какие есть другие части Node? — libuv отвечает за Event Loop, реализующий паттерн “Реактор”. Node.js базируется на движке V8, но также есть аналоги, например, Chakra.
Браузер и Node реализуют однопоточную модель вычислений. Что это означает и чем чревато? — из-за однопоточности, инструкции выполняются последовательно, одна за другой. Соответственно, каждая операция будет блокировать поток и не давать выполняться другим. Именно поэтому JavaScript — асинхронный язык программирования.
Как работает Event Loop? — ссылка
Вопросы по React:
Какую проблему решают хуки в React? — позволяют извлекать и повторно использовать логику работы с состоянием. Тем самым, они полностью заменяют HoC. Подробнее о хуках можно прочитать тут — https://learn-reactjs.ru/core/hooks/introduction.
Назовите методы жизненного цикла компонента React — https://metanit.com/web/react/2.6.php (актуальную информацию всегда можно посмотреть в официальной документации).
Как оптимизировать отображение массивов в React? — использовать аттрибут key, который позволяет при обновлении отрисовывать только измененный объект, а не весь массив.
Какая есть заменя HoC и хукам в React? — Redux, реализующий архитектуру Flux. О том, зачем использовать Redux, можно почитать тут.
Что такое контекст в React? Какой пример контекста вы можете привести? — это компонент, служащий для передачи глобальных параметров всем дочерним компонентам (https://ru.reactjs.org/docs/context.html). Пример — Provider из Redux.
Часть третья. Финальное интервью с Project Manager.
Данный этап может проводиться как совместно со вторым, так и отдельно. Вы встретитесь с человеком, который в перспективе будет вашим непосредственным начальником. Он прогонит вас по вопросам, по которым вас гонял HR, но углубляясь в них намного больше. Также, он будет оценивать вашу способность к коммуникации и работе в команде, насколько вы подходите по вашему опыту на текущий проект и так далее.
Конкретных ответов на вопросы на данном этапе нет, т.к. они не подразумевают ничего двусмысленного. Я лишь приведу примеры вопросов.
Примерные вопросы:
Какую задачу вам нужно было решить?
Какой путь решения выбрали и какие технологии использовали и почему?
Чему научились в процессе?
Заказчик работает по временному поясу США, а ты в России. Он сказал что пришлет ТЗ в 6 часов. У тебя уже 6 часов, но ТЗ ты так и не получил, твои действия?
Что можешь нового привнести в наш проект?












