Дмитрий Шостак
ведущий Frontend-разработчик IT-компании MediaSoft
Многие разработчики не любят, когда на собеседовании их просят писать код, но иногда это неизбежно. В этом материале я разберу несколько задач, с которыми вы можете столкнуться при прохождении интервью на позицию Middle JavaScript разработчика.Какие знания понадобятся:
- JavaScript;
- базовые структуры данных;
- большое O.
- размышляйте вслух;
- не торопитесь и не сдавайтесь;
- работайте с энтузиазмом.
JavaScript
Не могу не подчеркнуть, насколько важно в первую очередь хорошо изучить сам язык. Это поможет написать элегантное решение, не запутавшись в его тонкостях. Для этого вы должны не только знать все элементы и правила языка, но и иметь глубокое понимание их работы.Ресурсы для изучения:
- «Современный учебник JavaScript» (перевод Ильи Кантора);
- Eloquent JavaScript («Красноречивый JavaScript») (автор Marijn Haverbeke);
- JavaScript Ninja (автор John Resig).
Структуры данных
Если вы не знаете структуры данных, шансов прийти к оптимальному решению (и решению вообще) намного меньше. Поэтому нужно обязательно научиться работать со следующими вещами:- массивами;
- объектами/Хэш-мапами;
- связанными списками;
- стеками;
- очередями;
- деревьями;
- графами.
Большое О
О большое описывает эффективность выполнения кода — то есть то, насколько быстро выполняется алгоритм с учётом входных данных (time complexity).https://tproger.ru/jobs/middle-js-razrabotchik-react-typescript-holyweb/?utm_source=in_text
После того, как вы напишете свое решение, важно назвать его сложность и время выполнения.
Большое О к задаче пишется комментарием над решением.
Пример:
// O time | O(1) space
Определив эффективность своего кода, обсудите с собеседующим, что еще можно улучшить. По возможности предложите альтернативные способы решения задачи. Это покажет, что вы не просто выдаете заученные варианты, а действительно понимаете, как работает код.
Размышляйте вслух
Перед тем, как начать писать код, задачу нужно решить в уме, проговаривая весь мыслительный процесс. Так вы не запутаетесь, а собеседующий сможет оценить ваш ход мыслей.Не торопитесь и не сдавайтесь
Одна из частых ошибок – отдавать готовое решение без перепроверки. Перед сдачей работы обязательно пройдитесь по своему коду ещё раз, анализируя его вслух.Не поддавайтесь панике и не опускайте руки, если подойти к решению никак не получается. Это ещё не конец, и вы всё ещё можете успешно пройти интервью. Обдумайте проблему и попросите у собеседующего небольшую подсказку – это лучше, чем молча сидеть и надеяться, что вам помогут.
Работайте с энтузиазмом
Покажите неподдельную заинтересованность в решении задачи – это разрядит обстановку и облегчит процесс и для вас, и для собеседующего. Почувствуйте азарт, действуйте с пламенем в глазах и пылом в сердце – тогда и сконцентрироваться на задаче будет намного проще.Задачи уровня Middle
Сумма двух чисел
Напишите функцию, которая принимает два аргумента: массив из уникальных целых чисел и сумму в виде целого числа. Если сумма двух любых чисел массива из аргумента равна числу, которое приходит вторым аргументом, функция должна вернуть новый массив из этих двух чисел в любом порядке. Если решения нет, вернуть пустой массив. Текущее число само с собой складывать нельзя.Пример входных данных:
array = [3, 5, -4, 8, 11, 1, -1, 6]
targetSum = 10
На выходе:
[-1, 11] или [11, -1], так как -1 + 11 = 10 = targetSum
Решение 1
Решение 2
Преобразование массива в объект с группировкой и фильтрацией элементов
Напишите функцию, которая на вход принимает массив из студентов, где студент — это объект с полями «имя», «возраст» и «номер группы» {name: string, age: number, groupId: number}, а на выходе возвращает объект, где ключ — это номер группы, а значение — массив из студентов старше 17 лет.Решение 1
Решение 2
Проверка строки на палиндром
Напишите функцию, которая на вход принимает строку, состоящую из букв нижнего регистра, а на выход возвращает boolean, который отвечает, является ли данная строка палиндромом или нет.Палиндром — слово или текст, одинаково читающееся в обоих направлениях.
Решение 1
Решение 2
Найти ближайшее значение в бинарном дереве
Напишите функцию, которая принимает два аргумента — бинарное дерево и значение в виде числа, а возвращает ближайшее значение, найденное в бинарном дереве.Node = { value: number | null, left: Node | null, right: Node | null }
Решение
Итог
На собеседовании вы можете столкнуться с совершенно другими задачами. Пугаться их не стоит. Основная цель этих заданий в том, чтобы разработчик озвучил свой способ мышления. На ошибки и не до конца реализованную в коде задачу скорее всего закроют глаза. Интервьюеру важно увидеть, как вы рассуждаете, какие подходы используете в зависимости от ситуации, как быстро можете читать и понимать чужой код. Именно на основе этой информации он будет строить с вами дальнейший разговор и принимать решение о найме.Поэтому дерзайте и удачи на собеседовании
Источник статьи: https://tproger.ru/problems/sobesed...otchika-primery-zadach-i-neobhodimye-znanija/