Найти в Дзене
Журнал «Код»

9 заковыристых вопросов и задачек из собеседования по JavaScript

Попробуйте ответить на все Задача рекрутера на собеседованиях на джуниор-разработчиков — понять, можете ли вы программировать на JavaScript на начальном уровне и как вы справляетесь с нестандартными вопросами. Сегодня — 9 реальных вопросов с собеседований, которые задают новичкам. Попробуйте справиться со всеми, и, если получится, — поздравляем, вы готовы к настоящему собеседованию. Как очистить такой массив: var arrayList = ['п', 'р', 'и', 'в', 'е', 'т'] Чем больше способов назовёте — тем лучше. Под катом — три способа, попробуйте найти четвёртый. Ответ Вариант 1: Таким образом переменной arrayList задаётся новый пустой массив. Это решение подойдёт, если в других местах кода нет ссылок на исходное значение arrayList. Вариант 2: Такой код очищает существующий массив arrayList, устанавливая его длину как 0. Это решение подходит, если нужно обновить все ссылочные переменные, которые указывают на исходный массив arrayList. Вариант 3: Очистка массива таким образом также обновит все ссылки
Оглавление

Попробуйте ответить на все

Задача рекрутера на собеседованиях на джуниор-разработчиков — понять, можете ли вы программировать на JavaScript на начальном уровне и как вы справляетесь с нестандартными вопросами. Сегодня — 9 реальных вопросов с собеседований, которые задают новичкам. Попробуйте справиться со всеми, и, если получится, — поздравляем, вы готовы к настоящему собеседованию.

Как очистить такой массив: var arrayList = ['п', 'р', 'и', 'в', 'е', 'т']

Чем больше способов назовёте — тем лучше. Под катом — три способа, попробуйте найти четвёртый.

Ответ

Вариант 1:

-2

Таким образом переменной arrayList задаётся новый пустой массив. Это решение подойдёт, если в других местах кода нет ссылок на исходное значение arrayList.

Вариант 2:

-3

Такой код очищает существующий массив arrayList, устанавливая его длину как 0. Это решение подходит, если нужно обновить все ссылочные переменные, которые указывают на исходный массив arrayList.

Вариант 3:

-4

Очистка массива таким образом также обновит все ссылки на исходный массив arrayList.

Как проверить, что число — целое?

Целое — это значит, что у него нет дробной части, которая идёт после запятой. Например, число 5 — целое, а 8,6 — нет, потому что у него есть дробная часть.

Ответ

Самый простой способ узнать, что число целое, — проверить, есть ли остаток при делении числа на 1.

-5

Объясните, что такое функция обратного вызова (callback), и приведите простой пример

Функция обратного вызова — это функция, которая передаётся в качестве аргумента другой функции и выполняется после завершения операции.

Вот пример простой функции обратного вызова:

-6

Как проверить, что две строки являются анаграммами друг друга?

Анаграмма строки — это другая строка, которая содержит такие же символы, но в другом порядке. Например, «абвг» и «бгва» — это анаграммы.

Ответ

В решение можно добавить «защиту от дурака» — сделать так, чтобы регистр символов (большие и маленькие буквы) не влиял на работу кода. Если этого не сделать, то первая заглавная буква в первой строке может всё испортить: во второй строке она будет стоять последней и быть маленькой, а не большой.

-7

Что выведет этот код?

Подумайте хорошо, прежде чем отвечать.

-8

Ответ

Этот код выведет «1undefined».

В условном операторе мы описываем пустую функцию — function f() {}. С описанием всё в порядке, и функция определена корректно, поэтому мы получаем true, а значит — переходим к тому, что делает условный оператор. А вот там уже мы пытаемся получить тип объекта f, но проблема в том, что он определён в условии и не виден внутри фигурных скобок. Его область видимости — условие, которое мы уже проверили, и дальше эта функция нигде не видна, поэтому к единице добавляется сообщение, что переменная не определена.

Что выведет этот код?

Вопрос про область видимости с подвохом.

-9

Ответ

Этот код вернёт число 5.

Выражение var a = b = 5; читается как var a = b; b = 5; , поэтому в переменной b будет храниться пятёрка. А подвох тут в том, что хоть эта переменная и была объявлена только внутри функции, но JavaScript всё равно может иногда получать доступ к таким локальным переменным — это называется «поднятие» переменных, или hosting.

Что выведет этот код?

Вопрос на понимание стека вызовов.

-10

Ответ

На экране будут четыре четвёрки.

Здесь классическая ловушка с нулевыми задержками. Дело в том, что setTimeout (callback, 0) не означает, что обратный вызов функции сработает через ноль миллисекунд.

Вот что происходит тут на самом деле:

  1. Текущий стек вызовов установлен на первый setTimeout().
  2. windows.setTimeout() — это веб-API, и он не блокирует ввод-вывод при работе с функциями. Это значит, что через 0 миллисекунд наша анонимная функция будет отправлена в очередь, а не в стек вызовов. А в очереди она подождёт, пока основная программа не закончит свои дела и не вернётся к очереди.
  3. Поскольку стек вызовов свободен, цикл for может продолжиться до второго setTimeout(), потом до третьего и до четвёртого.
  4. Теперь цикл завершён, и i равно 4. Теперь JS может выполнять очередь вызовов один за другим. В итоге каждый console.log(i) выведет 4.

Как проверить, что строка является палиндромом?

Палиндром — это слово, фраза или другой тип строки, который читается одинаково слева направо и наоборот. К примеру, слова «потоп» и «Анна» — это палиндромы. А слова «Код» и «журнал» — не палиндромы, поскольку не читаются одинаково от начала до конца и от конца до начала.

Ответ

Простое решение — перевести всё в один регистр, перевернуть слово и сравнить его с исходным.

-11

Как посчитать все гласные в строке?

Ответ

-12