📚 Вот моя предыстория создания этой шпаргалки для взлома интервью Javascript.

Мое собеседование прошло мимо HR-раунда, и следующим (очевидным) заданием, которое я получил, было задание по программированию. У меня было меньше недели, чтобы подготовиться к этому, и я открыл свои задачи Leetcode, чтобы разобраться с проблемами и оптимизировать свой код до O(n), чтобы Я приобрел достаточно уверенности.

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

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

Хорошо! Итак, я объявил массив для ввода, Но как выполнить поиск элемента и как удалить элемент? 🤔это объединение или срез,принимает ли объединение два или три аргумента, влияет ли оно на исходный массив или вместо этого просто возвращает новый массив, как мне добавить элемент перед массивом? 😵. Если это вызов живого кодирования, то даже малейший признак тяжелого дыхания интервьюера может поразить мой мозг ядерной бомбой 💣.

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

Шаг назад после неправильного поворота — это шаг в правильном направлении.

- КУРТ ВОННЕГУТ

Восстановление мышечной памяти 💪

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

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

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

Неудача на собеседовании имеет вероятность 0,9, из всех кандидатов они выберут одного, но ваша цель состоит в том, чтобы переместить цель, пройдя количество раундов на этом собеседовании (выполнив 5 из 6 раундов это все равно Победа 🎊).

За 8 с лишним лет работы в области фронтенд-технологий я улучшил и оптимизировал показатель успешного завершения технического раунда с 60 % до 95 %, с каждой итерацией оптимизируя свой процесс и сокращая время, затрачиваемое на обдумывание. правильные структуры данных и методы.

Все технические раунды решения проблем предполагают, что вы решаете проблему, используя удобный для вас язык, а Javascript — мой швейцарский нож. Каждый язык поставляется со своими собственными готовыми утилитами или функциями для решения проблемы.

Шпаргалка по интервью 📑

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

Упомянутый ниже метод экономит ваше время и производит положительное впечатление на интервьюера. Я собираюсь объяснить чем они могут быть полезны, а не то, как это работает внутри. MDN — лучшая доступная документация по Javascript.

Это руководство будет вашим дополнительным руководством/инструментом, а не заменой концепций алгоритмов и методов решения проблем.

Множество

  • splice — вставка/замена элементов, постоянные эффекты в массиве.
splice(start, deleteCount, item1, item2, itemN)
const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// output: Array ["Jan", "Feb", "March", "April", "June"]
months.splice(4, 1, 'May');
// replaces 1 element at index 4
// output: Array ["Jan", "Feb", "March", "April", "May"]
  • slice — доступ к подмножеству массива. В основном используется в концепциях вложенных циклов. Значение -1 помогает удалить до конца списка.
    (пример: `array_items.slice(i,j)`, где iпредставляет внешний ссылка на цикл и jссылка на внутренний цикл)
slice(start, end)
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// output: Array ["camel", "duck"]
  • каждый — чтобы убедиться, что все элементы в массиве удовлетворяют выражению.
  • some – для проверки соответствия хотя бы одного элемента. Эффективен, поскольку останавливает цикл выполнения, если выражение удовлетворено.
  • from — поверхностное копирование для массива или преобразование строки в массив.
Array.from(“level”) -> [‘l’, ‘e’, ‘v’, ‘e’, ‘l’]
  • fill — инициализирует состояние решений с ограничениями.
To create m*n array. Array(m).fill(1)

Input: numRows = 5
Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
var generate = function(numRows) {
    let result = [];
    let i = 1;
    while(i <= numRows) {
        let prev = result[i-2];
        let temp = new Array(i).fill(1).map((j, index) => {
            if(index == 0 || index == i-1) {
                return j;
            }
            return prev[index] + prev[index -1];
        });
        result.push(temp);
        i++;
    }
    return result;
};

Здесь, в этой простой проблеме с кодом leet, если вы заметили логику, я использовал fill, который по умолчанию добавляет значение к инициированному массиву, что сокращает время компиляции при повторении каждой строки и заполнении значения.

  • flat — массив с вложенным массивом, необходимо вычислить или получить доступ ко всему элементу.
ex: sum of all items a = [1,[2], [[3]]] -> a.flat(2)
  • включает — чтобы проверить наличие элемента в массиве.
  • reduce — недооцененный метод в массиве, большинство решений требуют, чтобы вы выполняли операцию над элементами и отправляли результат на следующую итерацию.
  • shift ,unshift — удалить/добавить первый элемент напротив pop/push
  • sort — сортируйте элементы в порядке возрастания или убывания, чаще всего используется в начале или в конце решений.
  • join — объединяет элементы в массиве по указанной строке. Интенсивно используется, если операция включает преобразование массива в строку для получения окончательных результатов.

Нить

  • replace — заменить символ в строке. я бы порекомендовал использовать регулярное выражение, так как оно производит на вас положительное впечатление.
  • split — преобразуйте вашу строку в массив элементов, используя символ разделения.
  • test — чтобы проверить вашу строку на соответствие регулярному выражению.
  • charAt — чтобы найти положение символа в строке, используется в таких задачах, как анаграмма/перестановка и проблемы с комбинацией строк.
  • включает — поиск с учетом регистра, если одна строка может быть найдена в другой строке.

Объект

Математика

Большинство проблем с деревом связано с использованием математических операций для сравнения значений между узлами.

  • Мат.мин.
  • Math.max
  • Математика.Бесконечность
  • Мат.знак

Набор

Большинство проблем с матрицами связано с использованием списка элементов с частыми операциями поиска элемента в списке для добавления/удаления/поиска.
Set имеет больше преимуществ, чем традиционный массив.

Set не допускает дублирования значений

  • has — поиск элемента в наборе
  • добавить/удалить — вставка и удаление элементов в наборе.
var set = new Set([1,2,3]);
set.has(1) // true
set.add(1) // {1,2,3} no duplicates allowed
set.delete(1) // {2,3}

карта

Карта — лучший способ упорядочить ваши записи, он предоставляет объекту точные типы для ключ и значение.

Подобно традиционному объекту, который преобразует все ключи в строку, карта использует тот же объект, что и тип, без преобразования.

const map = new Map([1, “smile”], [2, “cry”], [42, “happy”])
map.get(42) // output: "happy" (42 is not string its a number)
// Easy for iterating the contents of the map
for (const [key,value] of map){
    console.log(`key: ${key}, value: ${value}`);
}
map.size // 3 (no of records in the map)

Другие концепции 🏫

  • Функция(связать, применить, позвонить — убедитесь, что вы правильно понимаете разницу между ними, так как это может помочь во время технического собеседования)
  • Закрытия
  • Сферы
  • Подъем
  • Сеттаймаут/сетинтервал
  • Обратный звонок/обещание
  • Мемоизация

Заключение 🔚

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

Реализация этих операций/методов в вашем коде дает лучшее впечатление о вас и выделяет вашу милю среди остальных кандидатов.

Пожалуйста, следите за мной в твиттере https://twitter.com/amerrnath21/