📚 Вот моя предыстория создания этой шпаргалки для взлома интервью 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 — чтобы найти положение символа в строке, используется в таких задачах, как анаграмма/перестановка и проблемы с комбинацией строк.
- включает — поиск с учетом регистра, если одна строка может быть найдена в другой строке.
Объект
- hasOwn/hasOwnProperty — чтобы проверить, есть ли ключ/свойство в объекте.
- Приведение объекта
Математика
Большинство проблем с деревом связано с использованием математических операций для сравнения значений между узлами.
- Мат.мин.
- 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/