За годы проведения технических собеседований я обнаружил, что эти вопросы полезно задавать. Некоторые из них являются базовыми вопросами, некоторые - нет. Некоторые ожидают кратких ответов и вопросов более или менее типа «да или нет», в то время как некоторые более открыты и не принимают верного ответа.

Эти вопросы предназначены для опытных разработчиков JavaScript с обычно 3–8-летним опытом, и список, очевидно, адаптируется (часто на лету) в зависимости от должности, на которую претендует кандидат (полный стек, интерфейс или серверная часть), его / его опыта и резюме. . Цель состоит в том, чтобы быть как можно более широким и сделать так, чтобы интервью выглядело как приятное обсуждение, а не, гм ... техническое интервью. Типичная продолжительность - 1 час 15 минут - 1 час 30 минут.

Вопросы по JavaScript / грамматике

  • Объясните разницу между == и ===
  • Что такое истинные и ложные ценности?
  • Что делает метод .bind () функции и что это за сигнатура?
  • Объясните основное различие между .call () и .apply ().
  • Что такое примитивы в JavaScript?

Еще несколько открытых вопросов, включая функциональное программирование

  • Какие гарантии предлагают стрелочную функцию? Предположим, их не существует, что вы будете делать?
  • Предположим, что ключевое слово class не существует, что вы делаете?
  • Что такое обещание? Зачем использовать обещания вместо обратных вызовов?
  • Что такое асинхронная функция?
  • Каковы преимущества чистой функции?
  • Что такое побочный эффект?
  • Каковы преимущества / недостатки использования неизменяемых структур?
  • Каковы сигнатуры функций .map () и .reduce () массива? Объясните, как реализовать .map () с .reduce ().
  • Что такое каррирование и / или частичное применение?
  • Что такое мемоизация?
  • Что вы можете сказать об операторе спреда?

Вопросы по React

  • Каковы преимущества / недостатки использования React?
  • Кратко объясните виртуальный DOM и проблемы, которые он решает.
  • Что такое JSX? Можете объяснить, как заставить его работать в браузере? Предположим, JSX не существует или не может использоваться, что вы делаете?
  • Зачем вам нужен менеджер состояний и когда нужно добавить его в стек?
  • Как вы запускаете рендеринг в React?
  • Какой метод вы реализуете, используя классы, если хотите предотвратить рендеринг компонента? В чем сигнатура этого метода? Как бы вы сравнили глубокие / сложные структуры, если бы вам пришлось?

Вопросы, касающиеся межсетевого взаимодействия с {передним | сервером}

  • Какие проблемы обычно возникают при использовании REST API? Что вы можете сказать о версиях?
  • Наряду с GET и POST назовите еще четыре HTTP-команды.
  • Объясните преимущества и недостатки использования GraphQL и REST API.
  • Кратко объясните, что такое cookie.

Вопросы по тестированию

  • Какие фреймворки вы используете при тестировании?
  • Кратко объясните, что такое покрытие кода.
  • Что такое библиотека утверждений?

Вопросы о Node.js / backend

  • Является ли JavaScript многопоточным? Как вы масштабируете Node.js?
  • Было бы неплохо обслуживать статические файлы с помощью Node.js?
  • Предположим, вы не можете использовать экспресс, что вы делаете?
  • Как вы обычно обрабатываете аутентификацию в Node.js? Какую библиотеку вы используете?
  • Как вы храните пароль в базе данных?
  • По вашим собственным словам, что такое транзакция базы данных? Что вы можете сказать о КИСЛОТЕ? Не могли бы вы подробнее рассказать об изоляции?
  • Почему люди обычно используют распределенные базы данных? Кратко объясните, что может пойти не так с согласованностью.
  • Что обычно может пойти не так с кешированием?

Вопросы по внешнему интерфейсу

  • Как вы объединяете ресурсы внешнего интерфейса?
  • Объясните трудности / проблемы использования CSS и какие инструменты вы используете сегодня для их решения?
  • Кратко объясните полифиллы.
  • Предположим, Webpack не существует, что вы делаете?

Еще несколько общих вопросов

  • Какие инструменты вы используете для управления зависимостями в JavaScript? Что вы можете сказать о семвере? Что такое детерминированная сборка?
  • Как решить, когда добавлять зависимость в стек? Предположим, вы нашли в npm несколько библиотек, которые решают вашу проблему, как выбрать, какую из них использовать?
  • Можете рассказать анекдот про программистов? :)

Вопросы, касающиеся git / контроля версий

  • Как создать ветку из командной строки?
  • В чем разница между удаленным и исходным?
  • Как получить изменения из удаленного репозитория?
  • Что делает git rebase --interactive?
  • Когда обычно используется git stash?
  • Что делает git cherry-pick?
  • Когда становится опасно переписывать историю?
  • Объясните, почему сообщение «Устранить некоторые проблемы» - плохое сообщение о фиксации.

В конце собеседования я всегда спрашиваю, есть ли у кандидата какие-то вопросы или другие технические темы, которые он хотел бы обсудить, которые мы могли пропустить. Некоторые вопросы являются более сложными, и я избегаю их задавать, если несколько намеков во время обсуждения заставят меня поверить в то, что кандидату будет сложно на них ответить; ключ в том, чтобы всегда стараться сделать интервью / обсуждение приятным моментом.

Надеюсь, вы нашли этот список полезным. Не стесняйтесь делиться своими мыслями в комментариях ниже.