Вопросы на собеседовании для JavaScript-программиста

3
34325
Добавить в избранное

Предлагаем вашему вниманию широкий список вопросов, которые могут задать на собеседовании JavaScript-программисту. Все задачи решены на JS, ES5 и ES6.

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

Массивы

1.1 У вас есть массив целых чисел, найдите наибольшее произведение из трёх чисел данного массива.

Решение на Codepen: https://codepen.io/kennymkchan/pen/LxoMvm?editors=0012

Нахождение пропущенного элемента

1.2 Неотсортированный массив содержит (n-1) чисел из последовательности {1,2,…,n} (границы определены), найдите недостающий элемент массива за время o(n).

Решение на Codepen: http://codepen.io/kennymkchan/pen/rjgoXw?editors=0012

Удаление повторяющихся значений

1.3 Удалите все одинаковые значения в массиве, возвращая массив, состоящий из уникальных элементов.

Решение на Codepen: http://codepen.io/kennymkchan/pen/ZLNwze?editors=0012

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

Решение на Codepen: http://codepen.io/kennymkchan/pen/MJdLWJ?editors=0012

И ещё задачи на массивы

1.5 У вас есть массив целых чисел, выведите такой массив, что output[i] равен произведению всех элементов массива за исключением i-ого. (Решите за O(n) без операции деления).

Решение на Codepen: http://codepen.io/kennymkchan/pen/OWYdJK?editors=0012

Пересечение двух массивов

1.6 Найдите пересечение двух массивов. Пересечение — это общие элементы, которые присутствуют в обоих массивах. Элементы должны быть уникальны.

Решение на Codepen: http://codepen.io/kennymkchan/pen/vgwbEb?editors=0012

Строки

2.1 У вас есть строка. Ваша задача — перевернуть каждое слово в строке. «Welcome to this Javascript Guide!» должно стать «emocleW ot siht tpircsavaJ !ediuG».

Решение на Codepen: http://codepen.io/kennymkchan/pen/VPOONZ?editors=0012

2.2 У вас есть две строки. Определите, являются ли они анаграммами друг к другу. «Mary» — анаграмм к «Army».

Решение на Codepen: http://codepen.io/kennymkchan/pen/NdVVVj?editors=0012

2.3 Проверьте, является ли строка палиндромом. «racecar» — палиндром. «race car» должен тоже считаться за палиндром. Регистр должен учитываться.

Решение на Codepen: http://codepen.io/kennymkchan/pen/xgNNNB?editors=0012

Изоморфные строки

2.4 Проверьте, являются ли две строки изоморфными.
Две строки называются изоморфными, когда в строке A можно заменить конкретный символ на любой другой для получения строки B. Порядок символов должен остаться неизменным. Каждый последовательный символ в строке A сравнивается с каждым последовательным символов в строке B.

‘paper’ и ‘title’ вернёт true (p = t, a = i, e = l, r = e).

‘egg’ и ‘sad’ вернёт false.

‘dgg’ и ‘add’ вернёт true.

Решение на Codepen: http://codepen.io/kennymkchan/pen/mRZgaj?editors=0012

Стэки и очереди

3.1 Реализуйте два метода: enqueue и dequeue, используя только два стэка

Решение на Codepen: http://codepen.io/kennymkchan/pen/mRYYZV?editors=0012

3.2 Напишите функцию, которая будет проверять, являются ли фигурные скобки сбалансированными, используя стэки. {} — считается блоком. {}{} — сбалансированные скобки. {{{}} — несбалансированные.

Решение на Codepen: http://codepen.io/kennymkchan/pen/egaawj?editors=0012

Рекурсия

4.1 Напишите рекурсивную функцию, которая переводит десятичное число в двоичное. Если входное число — 4, выходным будет 100.

Решение на Codepen: http://codepen.io/kennymkchan/pen/OWYYKb?editors=0012

4.2 Напишите рекурсивную функцию, которая выполняет бинарный поиск

Решение на Codepen: http://codepen.io/kennymkchan/pen/ygWWmK?editors=0012

Числа

5.1 У вас есть целое число, определите, является ли оно является степенью двойки.

Решение на Codepen: http://codepen.io/kennymkchan/pen/qRGGeG?editors=0012

JavaScript

6.1 Объясните, что такое «поднятие» в JavaScript.

«Поднятие» — это правило, которое подразумевает под собой необходимость перемещать все объявления переменных в вершину конкретного блока кода. Это касается объявления переменных, инициализация же может проходить и дальше в коде.

6.2 Объясните функционал директивы use strict;

директива use strict; говорит о том, что код должен быть выполнен в «строгом режиме». Один из плюсов данного режима — это то, что он предотвращает использование необъявленных переменных. Наиболее старые версии JavaScript будут игнорировать данную директиву.

6.3 Объясните, что такое event bubbling и как его предотвратить.
Even bubbling — это концепт, при котором порядок выполнения событий должен подниматься по структуре DOM-дерева.

Один из вариантов предотвращения — «event.stopPropagation()» или «event.cancelBubble», для IE версии ниже 9.

6.4 Какова разница между == и === в JavaScript?

=== известен как строгий оператор. Ключевая разница между == и === — это то, что == сравнивает лишь значения, а === — ещё и типы данных.

6.5 Какова разница между null и undefined?

Null в JavaScript может быть присвоен переменной, а undefined лишь показывает, что переменная была объявлена, но не была инициализирована.

6.6 В чём разница между прототипным наследованием и классическим наследованием?

В классическом наследовании классы неизменны, поддерживают множественное наследование, могут содержать интерфейсы, final классы и abstract классы. Прототипы же куда более гибки в том плане, что они могут быть изменены.

Другие статьи по теме

Подборка материалов по JavaScript

10 вещей, которые стоит знать каждому JavaScript-разработчику

Интересуетесь веб-разработкой?

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

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




3 Комментарии

  1. var unsortedArray = [-10, 7, 29, 30, 5, -10, -70];

    var x = function(A) {
    A.sort((x, y) => x y ? 1 : 0);
    var A03 = A.slice(A.length — 3).reduce((_, a) => _*a);
    var A21 = A.slice(0, 2).concat(A.slice(A.length — 1)).reduce((_, a) => _*a);
    return Math.max(A03, A21);
    }
    console.log(x(unsortedArray));

Оставьте комментарий