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

Данная статья будет интересна тем, кто хочет устроиться на работу. Она также поможет тем, кто не уверен в своих знаниях и хочет проверить себя. Опытные разработчики возможно найдут для себя пару интересных вещей, новички же соберут уйму информации для обдумывания. Ну, что ж начнём.

Базовый Javascript

Что выведет следующий фрагмент кода:

const symbol = Symbol('foo');
const object = {[symbol]: 1};
console.log(object[Symbol('foo')]);
Показать ответ

Данный код выведет undefined, так как символ представляет из себя уникальный идентификатор. Можете проверить:

console.log(Symbol('f') === Symbol('f'));
> false

Подробнее о символах можно прочитать здесь.

Что выведет следующий фрагмент кода:

const m = 10000;
new Intl.NumberFormat('de-DE',
	{
  	style: 'currency', 
  	currency: 'EUR'
  }).format(m);
Показать ответ

Данный код выведет '10.000,00 €'

Intl - конструктор чисел, который зависит от языка

Подробнее читайте на MDN

Что выведет следующий фрагмент:

const [num,str] = [10, 'str'];
console.log(
  Number.isNaN(str),
  Number.isNaN(num),
  isNaN(num),
  isNaN(str)
);
Показать ответ

Данный код выведет false, false, false, true

Подробнее о отличиях Number.isNaN() и isNaN() тут.

Что выведет данный фрагмент кода:

console.log(
    JSON.stringify(
      {
        x: 5,
      	y: 7
    },
    [
        'x',
      	8
    ]
  ));
Показать ответ

Данный код выведет {"x": 5}

Подробнее о JSON.stringify() можно посмотреть здесь.

Продолжаем:

console.log(typeof('1' + 1));
Показать ответ

Интерпретатор выведет 'string'

Любое выражение сложенное со строкой, где строка является первым операндом превращается в строку. Выражение '11' является типом string.

Продолжаем вопросы про приведение типов:

var str = "1";
str = +!str;
console.log(typeof str);
Показать ответ

Данный код выведет 'number'

Строка с оператором не (!) превращается в false (любая непустая строка преобразовывается в true). Унарный плюс превращает любое значение в примитив числа. false переведённый в числа является нулем. Выражение 0 является числом

Ещё один вопрос про приведение типов:

console.log(+`3`- true + '1');
Показать ответ

Данный код выведет '21'

Унарный плюс превращает строку `3` в число. true при вычислении с числом преобразовывается в единицу => 3 - 1 = 2. 2 + '1' = '21'

Следующий вопрос:

Какая длина массива?

let arr = [1,2,3,4,5];
delete arr[0];

Длина массива будет 5, так как вместо первого элемента будет просто пустота, но длина не поменяется.

Более подробно о delete тут.

Какие из данных методов меняют массив, а не возвращают новый:

  • map

  • reduce

  • splice

  • slice

  • find

  • filter

Ответ

Из всех методов прототипа Array только splice() редактирует сам массив, а не создает копию массива.

Что будет выводом данной программы:

const config = {
	react: true,
  node: false,
  angular: true,
  javascript: true
}
const techStack = ['javascript', 'angular', 'react'];
console.log(config.techStack[1]);
Показать ответ

TypeError - ответ данного вопроса.

Что выведет данный код:

console.log([] === []);
Посмотреть ответ

Данный код выведет false

В данном случае JS сравнивает два указателя, а не их содержание.
Подробнее можно посмотреть здесь.

React

Какой эквивалент данного кода

React.createElement('div', { style: { color: 'red' } }, 'title="block"')

Показать ответ
<div style="color: red;">title="block"</div>

Расскажите последовательность методов, которая происходит при монтировании компонента?

Ответ
  1. constructor()

  2. static getDerivedStateFromProps()

  3. render()

  4. componentDidMount()

Расскажите последовательность методов, которая происходит при обновлении компонента?

Показать ответ
  1. getDerivedStateFromProps()

  2. shouldComponentUpdate()

  3. render()

  4. getSnapshotBeforeUpdate()

  5. componentDidUpdate()

Как развернуть spread оператор для того чтобы все элементы из объекта перешли в пропсы?

Ответ
const opts = {foo: 'a', bar: 'b'};
// .....
<Component {...opts}/>

Если вам было интересно почитать про то, на какие именно вопросы на собеседованиях отвечал я, то вы можете подписаться на мой телеграм канал, там такого материала предостаточно.

Некоторые вопросы кажутся мучением, однако, работодатели есть работодатели. Я бы, естественно, задавал вопросы связанные непосредственно с работой, а не гонял бы по знаниям закоулков языка. Спасибо за то, что дочитали данную статью, надеюсь было интересно и вы немного поломали голову, как и я когда-то на собеседованиях. Хорошего дня и продуктивной недели!

Комментарии (14)


  1. interprise
    30.09.2021 11:29
    +6

    Второй вопрос, мне кажется очень странным "Intl - конструктор чисел, который зависит от языка", значит подразумевается, что я знаю как он работает именно для DE? и зачем мне эти знания? Да и задачи про сложение строк, чисел и булевых значений ну такое.

    OFFTOP В статье в блоке про stringify ссылка не работает.


    1. unibasil
      01.10.2021 10:17

      Поддерживаю, даже для русской локали нельзя сходу уверенно сказать, как будет отформатирован ответ — будет там знак ₽ или "руб", а уж про иностранные вообще что-то из области метазнаний.


  1. AndreyMyagkov
    30.09.2021 11:33
    +15

    Вопросы по JS не имеют ничего общего с реальными задачами в жизни, и скорее нацелены на унижение кандидата и, соответственно, самоутверждение интервьюера.
    Да, эта муть встречается на собеседованиях и к таким вопросам можно подготовиться за 1 день, пройти собес. А дальше что? Человек не пройдет испытательный срок, т.к. не умеет решать задачи.


    1. daniil-dev Автор
      30.09.2021 11:59
      -3

      Данные вопросы нужны для того чтобы понять знает ли кандидат язык, не более, к задачам они действительно не имеют никакого отношения. Я просто поделился тем, что меня спрашивали, сам бы я такую муть не спрашивал)


  1. MarkFish
    30.09.2021 13:40
    +2

    Вопросы, которые меня спрашивали ... другие джуны

    Простите, а зачем спрашивать про то, что можно вбить в редакторе кода и самостоятельно получить ответ?


    1. daniil-dev Автор
      30.09.2021 14:03
      -1

      Тот же вопрос про массивы `[] === []` без определенных знаний не понять. + На собеседованиях зачастую проверяют знания языка, а не умение гуглить (хотя и тот и тот навык нужен)


  1. AGrinko
    30.09.2021 13:58
    +4

    Кто-нибудь уже прокомментировал заголовок статьи? Возьму это на себя :)

    Чуть три раза голову не сломал, пока понял суть заголовка. Вас спрашивали вопросы? Вопросы и другие джуны? Другие джуны на собеседованиях? Джуны уже проводят собеседования? x_x

    Чтоб не быть совсем деструктивным, предложу пару альтернативных вариантов:

    Вопросы, которые мне задавали интервьюеры и коллеги

    Вопросы интервьюеров и джуниоров

    Вопросы на собеседованиях и в реальной работе

    Вопросы бывших, настоящих и потенциальных коллег


  1. kilexx
    30.09.2021 14:01
    +1

    Не хочу обидеть. Очень режет слух "Вопросы, которые меня спрашивали...". Наверное лучше использовать "Вопросы, которые мне задавали ..."


    1. daniil-dev Автор
      30.09.2021 14:02

      Да, так действительно лучше, исправил)


      1. AGrinko
        30.09.2021 18:14

        Всё равно некорректно: "... задавали на собеседовании и другие джуны". Ну не строятся так предложения в русском языке. "Задавали рекрутеры и другие джуны" - вот так валидно.


        1. muturgan
          30.09.2021 19:46
          +8

          Да ты не понимаешь специфики. Люди, которые привыкли разбирать выражения вида console.log(+ '3' - true + '1') только так предложения и строят ;)


  1. Alexandroppolus
    30.09.2021 17:29
    +1

    Вопросы довольно скучные. Какого хрена я должен знать, как там в этом их немецком языке выглядит карренси??

    Особенно рассмешил криво поставленный вопрос "Какие из данных методов меняют массив, а не возвращают новый". Сплайс тоже возвращает новый массив. Лол, кек.


  1. RC_Cat
    02.10.2021 17:45
    -1

    Как вообще язык с такими багами в дизайне используется в проде, вот в чем вопрос.


    1. unibasil
      08.10.2021 08:24
      +1

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