Я недавно закончил учебный курс по программированию. Одним из льгот, которые предоставил нам мой буткемп, было бесплатное пробное техническое собеседование. Это будет часовой сеанс на компьютере, где вы пишете код с интервьюером. Вот несколько советов, которые я обнаружил, чтобы сделать все возможное на любом техническом собеседовании.
Изучите основы своего языка программирования
Во-первых, будьте готовы ответить на несколько основных вопросов, касающихся принципов вашего языка. У меня было собеседование по JavaScript, и меня спросили: «Что такое прототип?», «Что такое наследование?» и "Что такое закрытие?" Некоторые другие вопросы, которые, как известно, задают на собеседованиях по JavaScript: «В чем разница между var, let и const?», «В чем разница между объектом и классом?», «Что такое подъем?» и «Что такое ключевое слово« это »?».
Вот источник дополнительных концепций JavaScript, которые нужно знать для вашего технического собеседования: https://codeburst.io/10-javascript-concepts-you-need-to-know-for-interviews-136df65ecce.
Обзор принципов информатики
Затем просмотрите некоторые основные концепции информатики, такие как структуры данных и нотация Big-O. Это может пригодиться на вашем техническом собеседовании.
Некоторые ресурсы по этим темам включают https://www.freecodecamp.org/news/the-top-data-structures-you-should-know-for-your-next-coding-interview-36af0831f5e3/ и https: //rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ .
Алгоритмы практики
Хорошо это или плохо, но большинство технических собеседований основаны на алгоритмах. Я настоятельно рекомендую перед собеседованием отработать как можно больше алгоритмов.
Вот некоторые ресурсы, которые я использовал: https://www.codewars.com/ и https://www.hackerrank.com/. Дополнительные варианты можно найти здесь: https://medium.com/coderbyte/the-10-best-coding-challenge-websites-for-2018-12b57645b654.
Обсуждение во время интервью
Хорошо, пришло время интервью. Вы думаете, что достаточно изучили. Вы явно нервничаете. Сделайте несколько глубоких вдохов. Съесть что-то. Постарайтесь сохранять спокойствие и сосредоточенность.
Самый большой совет, который я могу вам дать во время интервью: ПРОДОЛЖАЙТЕ ГОВОРИТЬ. Неважно, застряли ли вы полностью, если вы не знаете, что вам нужно делать, просто не прекращайте говорить. Общение с интервьюером о том, каков ваш мыслительный процесс, показывает им, каковы ваши навыки решения проблем. Говорите о том, что, по вашему мнению, происходит. Выбросьте идеи о различных способах решения проблемы.
Псевдокод
Рассказывая о своем процессе, начните псевдокодирование. Если вы уже знаете ответ, не стесняйтесь пропустить этот шаг, но это хороший способ заставить свой мозг работать, когда вы абсолютно застряли. Напишите в общих чертах, что, по вашему мнению, вам нужно сделать для решения проблемы. Затем постепенно переходите к конкретным вопросам, по мере того как вы начинаете придумывать более конкретные способы получения нужного вам решения.
Задавайте хорошие вопросы
Ваш интервьюер поможет вам, а не поставит вас в тупик. В моем конкретном интервью я не вспомнил конкретный метод JavaScript, который мне нужен для решения проблемы. Я описал то, что я думал, и мой интервьюер дал мне ответ.
Если у вас есть возможность: Google предлагает решение. В некоторых интервью полностью разрешен поиск в Google. Используйте это в своих интересах.
Независимо от того, что вы делаете, старайтесь сохранять спокойствие на протяжении всего процесса.
Пример проблемы алгоритма
Передо мной возникла большая проблема алгоритма:
Учитывая массив вложенных массивов [1, [2, 3], [[4]], 5, [[[6]]]]], как бы вы написали функцию для его выравнивания без использования плоского метода?
Вот мое решение:
Как я решил это решить? Я начал говорить, о чем думал. Мне понадобится цикл для перебора массива, поэтому я создал цикл for. Я знаю, что мне понадобится пустой массив для вставки элементов, поэтому я создал его. На каждой итерации цикла я вставлял элемент в новый массив. Затем я понял, что мне понадобится еще один цикл внутри этого массива, если бы элемент, который я хотел, был самим массивом. Это означает, что мне пришлось создать цикл для каждого уровня вложенности каждого элемента.
Решение? Используйте рекурсию. Когда вы создаете функцию, которая выполняет за вас основную работу, вы можете вызывать эту функцию внутри себя. Важная часть рекурсии - иметь хорошую точку остановки. Вам не нужна бесконечная петля. Я сделал это с помощью оператора if: если элемент является массивом, снова сгладьте его, запустив эту функцию; если нет, вставьте элемент в новый массив.
Последующий вопрос моего собеседника был: как бы вы решили эту проблему без рекурсии? В то время я не мог ответить на этот вопрос, но с тех пор ищу ответ.
Этот вопрос StackOverflow дает несколько вариантов решений без рекурсии: https://stackoverflow.com/questions/27303369/flatten-array-of-multiple-nested-arrays-without-recursion-javascript/37357916.
Это был мой любимый ответ:
Некоторые другие примерные вопросы алгоритма включают «Вернуть n-е число последовательности Фибоначчи», «Попросить функцию FirstFactorial (num) взять переданный числовой параметр и вернуть его факториал. Например: если число равно 4, тогда ваша программа должна вернуть (4 * 3 * 2 * 1) = 24 », а классический FizzBuzz:« Напишите программу, которая печатает числа от 1 до 21. Для числа, кратного трем, напечатайте «Физз» вместо числа. Если число кратно пяти, выведите «Buzz» вместо числа. Для чисел, кратных трем и пяти, выведите «FizzBuzz».
Другие примеры проблем алгоритмов можно найти здесь: https://www.thatjsdude.com/interview/js1.html
Имейте в виду, что эти вопросы могут варьироваться в зависимости от языка, на котором проводится тестирование, компании, на которую нанимается, и должности.
Надеюсь, это помогло!