Рубрики
Без рубрики

Техническое исследование собеседования Технического телефона: Как удвоить массив в JavaScript

Джейн Филиппс Технические телефонные Телефонные Интервью Исследование: Как удвоить массив в JavaScriptPhoto от Pavan Trikutam на Unsplashtechnical телефонные экраны – это решающий шаг в процессе технического интервью. Часто, передают ли вы экран технического телефона, будут диктовать, будет ли вы приглашены на

Автор оригинала: FreeCodeCamp Community Member.

Джейн Филиппс

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

Технические экраны телефона могут быть жесткими, потому что вы должны подумать громко, работая через проблему, не имея выгоды от того, чтобы быть там лично с вашим интервьюером. Когда вы занимаетесь интервью с кем-то по телефону или видео, для всего присутствия может быть сложно. Обычно вы будете работать в общем редакторе, поэтому, хотя вы работаете с проблемой, интервьюер сможет услышать вас и посмотреть, что вы печатаете. Многие люди труднее общаться таким образом, чем лично.

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

Хотя все телефонные телефонные интервью разные, большинство потребуют вас подумать о ваших ногах. Таким образом, лучший способ подготовить – это просто для практики работы по вопросам. Вы можете пройти через них самостоятельно, говоря их, и вы также можете практиковаться с другом. Если вы практикуете самостоятельно, вы можете даже записать себя, чтобы вы могли послушать записи и посмотреть, если вы объяснили, что ваш мыслительный процесс имеет смысл.

Наконец, вы можете попрактиковаться с интервью с компаниями! Когда я продержал интервью на новую роль, я начал с поиска компаний, которые меня интересует, но не будет расстроен, если бы я не прошел экран Технического телефона. Таким образом, я все еще испытывал давление, чтобы подготовиться, но я ожидал, что впредь несколько раз потерпеть неудачу. Затем было менее разочаровывает, когда я не двигался на следующий этап.

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

Давайте погрузиться в.

Вопрос

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

Вот вопрос выборки интервью:

Given an array, write a function that doubles the array.Example: given [1,2,3,4,5], your function should return [1,2,3,4,5,1,2,3,4,5].You could call it like so: myArray.double().

Отвечая на вопрос

Вот мои пять шагов для приближения к проблеме на экране технического телефона:

1. Уточнить вопрос

2. Подумайте о небольших тестовых случаях, включая кромки

3. Псевдо-код Ваше решение (необязательно)

4. Переведите свой псевдокод в реальный код

5. Проверьте свое решение, используя тестовые случаи, которые вы придумали ранее

1. Уточнить вопрос

Первое, что вы должны сделать, когда дали вопрос собеседования, подобное это просит уточнить вопросы.

В этом случае вопрос относительно проста: я понимаю, что мне нужно написать функцию, которая принимает в массиве и возвращает массив, который был манипулирован. Понимание ввода и вывода функции приводит к тому, что часто считается Функция подпись Отказ

2. Подумайте о небольших тестовых случаях, включая кромки

Далее вы захотите подумать о некоторых небольших примерах, которые позже будут служить вашими испытаниями позже:

// What happens when the given array is empty?[] => []
// What happens when the given array has only 1 element?[1] => [1,1]
// What happens when the given array has only 2 elements?[1,2] => [1,2,1,2]
// What happens when the given array has N elements?[1...N] => [1,2,3,4,5...N,1,2,3,4,5...N]

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

3. Псевдо-код Ваше решение (необязательно)

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

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

У меня когда-то было телефонное интервью, где я написал шаги в псевдо-коде перед записью фактического кода. Интервьюер смог помочь мне направлять, указывая на шаг в моем псевдо-коде, который мне нужно было взять дальше. В этом случае интервьюер также упомянул, что он никогда не видел, чтобы кто-то сделал это раньше, и был невероятно впечатлен. Итак, псевдокодирование также имеет преимущество, показывать ваш интервьюер, который вы организовали и впечатляете их этими навыками!

Итак, возвращаясь к вопросу под рукой, вот какой-то псевдо-код вы можете написать:

// Define a function that takes in an array// Loop over the array// Push each element from the array back into the array// Return the array

4. Переведите свой псевдокод в реальный код

Теперь, когда вы написали псевдокод, пришло время сделать некоторое кодирование. На этот вопрос первое (неверное) решение, которое я придумал, выглядел так:

var array = [1,2,3,4,5];
var double = function(array) {
  for (var i = 0; i < array.length; i++) {    array.push(array[i]);  }
  return array;
}
double(array);

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

5. Проверьте свое решение, используя тестовые случаи, которые вы придумали ранее

Если вы опытный программист, вы можете легко обнаружить ошибку в своем решении выше. Но до тех пор, пока я не провел свой код, который я понял, что создал страшный Бесконечная петля Действительно

Почему это создает бесконечный цикл? array.length что я использовал, чтобы узнать, когда мой для Цикл остановится, был динамически увеличен, так как я нажимал новые элементы в массив! Итак, когда для Цикл начался, array.length был равен 5. Но после первой итерации для петля, array.length был равен 6, а дальше и на AD Infinitum.

Тем не менее, существует простое изменение, которое сделает это решение:

var array = [1,2,3,4,5];
var double = function(array) {
  var length = array.length;
  for (var i = 0; i < length; i++) {    array.push(array[i]);  }
  return array;
}
double(array);=> [1,2,3,4,5,1,2,3,4,5]

Во время выполнения:

С этим изменением я объявляю переменную под названием Длина Внутри объема функции, а затем используя это как разделитель для моего для петля. Хотя мой размер массива теперь меняется, для петля все еще останавливается после 5-й итерации, потому что переменная длины не меняется, когда array.length изменения.

Теперь я могу проверить свой код с краевыми чехлами, которые я придумал ранее и вижу, что результаты, как и ожидалось:

// Passing in an empty array yields an empty array correctly:[] => []
// Passing in an array with only 1 element yields the correct array with 2 elements:[1] => [1,1]
// Passing in an array with only 2 elements yields the correct array with 4 elements:[1,2] => [1,2,1,2]
// Passing in an array with 10 elements yields the correct array with 20 elements:[1,2,3,4,5,6,7,8,9,10] => [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10]

Альтернативные решения

Вышеуказанное является одним из способов решить этот вопрос, но есть пару других альтернатив. Помните, когда я представил вопрос выше с предложением призвания функции, написав что-то вроде myarray.double () ? Если вы знакомы с ориентированным на объект программирование, вы можете распознать этот синтаксис. В этом случае общая идея состоит в том, что вы на самом деле добавили метод массива под названием Двойной Используя цепь прототипа, то вы сможете позвонить.

Вот пример того, как я мог сделать это, используя для Контурная структура из моего оригинального решения:

Array.prototype.double = function() {  var length = this.length;
  for (var i = 0; i < length; i++) {    this.push(this[i]);  }
  return this;}
var myArray = [1,2,3,4,5];
myArray.double();=> [1,2,3,4,5,1,2,3,4,5]

Определяя функцию с использованием цепочки прототипы JavaScript, мне на самом деле не нужно ничего проходить в него, потому что у меня есть доступ к массиву, который метод называется это Отказ Чтобы узнать больше о это Ключевое слово, прочитать MDN Docs Отказ

Теперь эти решения велики, но как насчет ответа на этот вопрос без использования для петля? Одним из способов является использование встроенного метода JavaScript foreach Отказ Это та же идея, что и для петля, но вместо нас рассказывает программу, как выполнить наш код (императивное программирование) Мы собираемся рассказать это, что является результатом (декларативное программирование). Вы можете узнать больше о императив против декларативного программирования здесь Отказ

Вот пример того же решения, используя foreach :

var array = [1,2,3,4,5];
var double = function(array) {
  array.forEach(function(value) {    array.push(value);  });
  return array;}
double(array);=> [1,2,3,4,5,1,2,3,4,5]

Во время выполнения:

Наконец, вот еще одно решение этой проблемы, которую я нашел с несколькими быстрыми поисками Google.

Также есть построенный метод массива под названием Concat что вы можете использовать:

var array = [1,2,3,4,5];
var double = function(array) {  var doubled = array.concat(array);
  return doubled;}
double(array);=> [1,2,3,4,5,1,2,3,4,5]

Во время выполнения:

ЗАМЕТКА: Если вам интересно, про поиском Google во время экрана телефона, вот мой взять после участия в более чем дюжине технических телефонов: обычно это совершенно приемлемо.

Технические экраны телефона часто запланированы на 45 минут до 1 часа. Некоторые из этого времени зарезервированы для интервьюера, чтобы задать вопросы о вашем опыте, а некоторые также зарезервированы для вас, чтобы задать вопросы. Время, которое вы проводите кодирование, могут быть где угодно с 30-45 минут на основе компании и интервьюера.

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

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

Тем не менее, Googling для решения во время вашего интервью также может быть раковиной, особенно если вы не ищете справа от правильной фразы (это где, чем больше вы ищете, тем лучше вы станете).

Для этого конкретного примера, если я уже знал о методе Concat JavaScript, он мог прийти к уму, когда столкнулся с этой проблемой. Затем гуглами, чтобы напомнить себе о том, как Concat работал бы приемлемым.

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

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

Заключение

Почему я показываю вам все эти примеры? Как видите, есть не только один способ подходить к этой проблеме. Есть несколько подходов, которые вы можете взять, и как вы приближаетесь к проблеме, все зависит от комбинации того, что находится ваш фон и как вы думаете о решении проблем. Для меня я часто тяготелю к петлям с для Петли были одним из оригинальных концепций программирования, которую я узнал. Но кто-то, кто использовал Concat прежде чем может подумать об этом прямо с летучей мыши.

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

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

Один окончательный совет

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

Каким был ваш опыт работы с телефонными телефонами? Ты их любишь? Ты ненавидишь их? Что была самая интересная проблема, которую вас попросили решить? Оставьте комментарий ниже или дайте мне знать, отправляя мне по электронной почте на Jane [AT] FULLStackInderviewing [dot] com.

Тебе понравилась эта статья? Вас заинтересованы в посадке вашей мечты в разработке программного обеспечения? Подпишитесь на мой список рассылки Отказ

Оригинал: “https://www.freecodecamp.org/news/technical-phone-interview-case-study-how-to-double-an-array-in-javascript-90a95aa98e3e/”