Это только я, или это вопрос технического интервью? [закрыто]

153

Фон

Меня просто попросили в техническом интервью написать алгоритм для прохождения «объекта» (обратите внимание на кавычки), где A равно B, а B равно C, а A равно C.

Вот и все. Это вся информация, которую мне дали.

Я спросил интервьюера, какова была цель, но, видимо, ее не было, просто «пересек» «объект».

Я не знаю ни о ком другом, но мне кажется, что это глупый вопрос. Я снова спросил: «Я ищу значение?». Нет. Просто "пройти" это.

Зачем мне когда-нибудь бесконечно проходить через этот "объект" ?? Чтобы расплавить мой процессор может быть ??

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

Хорошо, так почему бы просто не попросить меня написать рекурсивную функцию? И кто написал бы рекурсивную функцию, которая никогда не заканчивается?

Мой вопрос:

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

Мэтт Кашатт
источник
197
Единственный правильный ответ здесь: «Я не понимаю вопроса».
user16764
16
Что ж, если они действительно не сказали, что такое A, B и C (например, они являются объектами), и они помещают объект в кавычки, у них, похоже, есть своя уникальная терминология. Если бы они спросили, как пройти по графу объектов, где объект A ссылается на объект B, который ссылается на объект C, который ссылается на объект A, это было бы понятно, но почему он должен быть рекурсивным, я не знаю. Между прочим, он не должен быть бесконечным, если вы поддерживаете список уже посещенных объектов. Но да, я был бы обеспокоен работой в компании, использующей этот тест - они кажутся запутанными.
PSR
77
Вопрос в том виде, как он описан, бессмысленен, и ответ на него тоже. Либо вы не помните то, что они просили, либо тот, кто спрашивает, идиот, и вам, вероятно, лучше не работать с ним.
Мейсон Уилер
26
Почему интервью с разработчиками должны быть болезненными? Разве мы не можем просто сесть, посмотреть на код друг друга и обсудить? Разработчики узнают, где находятся другие разработчики, и это не займет 6 часов. Тесты кода являются худшими. Я не против признаться, что я неудачлив в предоставлении оптимальных решений, в то время как 3 разработчика, которых я никогда не встречал, наблюдают за мной, когда я печатаю.
Эрик Реппен
19
Я должен был проверить ваш профиль, чтобы увидеть, живете ли вы в том же районе, что и я, потому что я некоторое время работал на работе, где собеседник спросил меня: «Вы ориентированы на детали?» На что я ответил: «Можете ли вы быть более конкретным?» И его ответ: «Я не могу это объяснить, но я знаю человека, ориентированного на детали, когда вижу их работу». Люблю двусмысленность.
Джесси С. Slicer

Ответы:

305

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

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

Имеет смысл «пересечь» узлы «двоичного дерева». Нет смысла «пересекать» «клоуна». Тем не менее, объект может так же легко представлять «клоуна», как он может представлять «двоичное дерево».

Matt
источник
9
Я недавно начал практиковать замену существительных в глупых вопросах словом «клоун» +1 сэр!
rupjones
108
«Обход клоуна» - отличный мем для «глупого технического вопроса». Передай это!
Радар Боб
8
Хм, я могу пройти var clown = {hat: "with flower", волосы: "ярко-красный", нос: "red ball", рот: "Red mouth в рамке белого цвета", ...};)
mplungjan
37
Вся моя область теоретических исследований CS включает в себя итеративный обход клоуна, вы нечувствительный ком!
6
@JackManey: Все знают, что клоуны должны проходить рекурсивно .
Адам Робинсон
39

Я вижу три возможности здесь.

  1. Она была совершенно некомпетентна. Не намного больше, чтобы сказать об этом.
  2. Она сознательно делала это двусмысленно, чтобы увидеть, насколько хорошо вы будете задавать вопросы, чтобы выяснить, что вы должны были сделать, и что она действительно хотела.
  3. По какой-то причине она решила, что не хочет, чтобы вас нанимали, поэтому задала вопрос, который был неопровержимым как даный. Когда ее спрашивали о ваших навыках, она пропускала эту часть и говорила что-то вроде: «Я спросил его о том, как пройти трехузловой граф, и он был совершенно ошарашен - даже понятия не имел о том, как для начала. Очевидно, он крайне некомпетентен! Мы не должны даже думать о его найме ".
Джерри Гроб
источник
7
«Я спросил его о том, как пройти по трехузловому графу ...» Если я исправляю сообщение ОП, там нет упоминания о графе или узле. просто "объекты". Это форма «ложных показаний». Если она напишет что-то подобное, это может быть привлечено к ответственности!
Эмилио Гаравалья
9
Вы обычно используете женские местоимения, когда пол человека не указан?
Чан-Хо Су
8
@EmilioGaravaglia: Прежде всего, это никогда не может быть написано. Во-вторых, даже если предположить, что он записан, вы, несомненно, никогда не получите к нему доступ, просто письмо «Мы с сожалением сообщаем вам ...». В-третьих, если у вас нет записи интервью, как вы докажете, что интервьюер не говорил правду? Итог: в теории вы должны быть правы - но в действительности шансов практически нет.
Джерри Коффин
11
@ Chan-HoSuh: ОП упоминает пол в одном из своих комментариев.
Джерри Коффин
4
@JerryCoffin Тогда мои извинения.
Чан-Хо Су
32

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

Рекурсивная функция? Это для обхода дерева. Я не вижу ничего в исходном вопросе, который бы подразумевал, что он говорит о дереве.

Роберт Харви
источник
28
Двигаться дальше. Есть лучшие компании для работы.
Шуфлер
7
Неа. Это безнадежное дело. Если бы интервьюер подумал, что он неправ, он бы не задал вопрос в первую очередь. Меня однажды попросили написать образец на любом языке, который я хотел; человек, опрашивающий меня, предположил, что псевдокод был правильным выбором.
Роберт Харви
8
@ Роберт Харви: Что не так с псевдокодом?
Джеймс
6
@ Роберт Харви: Чтобы быть справедливым, большинство людей хотят понять, как вы решаете проблему, а не узнаете, изучили ли вы синтаксис какого-либо конкретного языка. Обычно псевдокод указывается в алгоритмах.
Джеймс
8
В чем разница между псевдокодом и Python? :)
Дэвид Робинсон
15

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

Дано:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

Типичный неправильный ответ может «пересечь» только первый уровень и распечатать / сравнить:

'value1'
2
[Object object]

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

  • Обработка циклических ссылок
  • Как обращаться с массивами (должны ли они также проходить рекурсивно?)
  • Должны ли функции оцениваться и обрабатываться их возвращаемое значение?
  • Для JavaScript: должен ли прототип совпадать и должны ли сравниваться унаследованные свойства?

Таким образом, «решение», которое, как я предполагаю, искал интервьюер, состояло в том, чтобы начать разговор по, казалось бы, простому вопросу, который имеет много продвинутых тем - рекурсивность, указатели / ссылки, ожидания и т. Д.

WSkid
источник
5
В этом есть смысл, WSKid. К сожалению, ни один из этого контекста не был предложен.
Мэтт Кашатт
3
Правда, это действительно цепляет за соломинку. Они должны были представить вариант использования, или пример 3 объекта, или что-то, что могло бы привести к реальной проблеме.
WSkid
1
Я думал так же, только для атрибутов объекта Python. Знание того, на какой вопрос они ожидали получить ответ, было бы чрезвычайно полезным, но этого можно было бы ожидать в зависимости от положения, например, python dev, c # dev, javascript dev, php dev и т. Д.
Ken
2
+1 за поиск контекста, в котором вопрос имеет смысл!
Donal Fellows
9

Некоторые интервьюеры специально пытаются задать вопросы, чтобы убедиться, что кандидат достаточно умен и честен, чтобы дать один из следующих двух ответов:

Я не знаю.

или, может быть:

Я не могу ответить на это, как указано.

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

hotpaw2
источник
6
Вся наша жизнь в таком сценарии, как это интервью, обусловлена ​​возможностью дать ответ на вопрос. Если говорить «я не знаю» (что я сделал, кстати) было бы приемлемо, то мне следовало бы сказать это и раньше. Добросовестная попытка ответить на вопрос интервью не обязательно равносильна тому, как можно поступить с неадекватной спецификацией или набором требований. И я думаю, что в этом весь смысл, эти интервью отклонились от курса и во многих случаях упускают суть.
Мэтт Кашатт
Такой хороший ответ. Однако не забывайте, что для того, чтобы это сказать, требуется большой опыт. Лично я могу сказать, что опыт с интервью является важной частью работы. @MatthewPatrickCashatt, если интервьюер не примет «я не знаю», то не намного больше, чтобы обсуждать ИМО.
Арин
2
Хитрые вопросы - либо троллинг, либо полная некомпетентность. В любом случае, если интервьюер задает хитрые вопросы, вы не хотите там работать.
Бен Броцка
7

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

Если это был вопрос со связанным списком, то у вас (в данном случае) есть односвязный список, где конечный узел указывает на другой конец (хотя, если он был сформулирован, как вы говорите - тогда он может быть дважды связан, если A указывает на B и C - но разъяснения со стороны интервьюера помогли бы в этом).

A -> B -> C -> A

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

MAICh
источник
1
Спасибо Maich - я думаю, что ваш последний пункт является наиболее вероятным.
Мэтт Кашатт
5

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

JB King
источник
1
Спасибо Джей Би Кинг. Это хорошее хорошее напоминание, чтобы задавать вопросы. В данном конкретном случае я это сделал. На самом деле, я даже спросил, дерево ли это, и ответ был - нет! Но вы правильно поняли, что я отвечаю за то, чтобы как можно больше информации задавать, задавая вопросы.
Мэтт Кашатт
3

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

BenjaminB
источник
5
Я хотел бы видеть пример одной из их технических спецификаций для программного проекта.
Чак Д
Если собеседование проводится для системного аналитика или аналогичной должности, это вполне уместно: ваша задача - помочь клиентам уточнить свои вопросы, а не ответить на них.
reinierpost
1
@ reinierpost - Это не так.
Мэтт Кашатт
3

Напишите алгоритм для прохождения «объекта» (обратите внимание на кавычки), где A равно B, а B равно C и A равно C.

Кажется, что большинство людей предполагают, что A, B и C являются указателями, но они также могут быть клоунами. (Или члены класса клоунов.) Или они могут быть именами клоунов. (Или имена классов. Или подклассы класса клоуна.)

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

Джим
источник
2

В то время как вопрос был сформулирован плохо, и интервьюер явно не помогал в определении направления, я немного по-другому смотрю на вопрос.

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

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

Лукас
источник
2

Приходит очень поздно на эту вечеринку, но я думаю, что интервьюер неправильно задал этот вопрос:

Напишите алгоритм для обхода массива и определите, что A равно B, а B равно C и A равно C, в этом порядке.

Тогда правильным ответом будет рекурсивный алгоритм.

pgthew
источник
1

Меня просто попросили в техническом интервью написать алгоритм для прохождения «объекта» (обратите внимание на кавычки), где A равно B, а B равно C, а A равно C.

objectВ вопросе состоит из частей A,B and C, и он образует triangle. Человек просто спрашивает, содержит ли объект (коллекция) все равные части.

Интервьюер хочет знать, представлены ли части с частями, A, B and Cможно ли сказать, что все они равны, не зацикливаясь на бесконечности. Этот вопрос глупо просто понять, и все же им удалось его обдумать.

Они все равны когда A == B && B == C && A == C, но это можно упростить до справедливости A == B && A == C.

Простота вопроса привела к путанице, и она действительно сформулирована плохо.

Правильная формулировка должна была быть.

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


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

Да, вы можете ответить на вопрос, are all my parts equalиспользуя рекурсивные функции. Нет, это не эффективное решение.

РЕДАКТИРОВАТЬ : После некоторой мысли. Нет, невозможно проверить, что коллекция содержит все равные части, используя рекурсивную функцию.

Наиболее эффективное решение заключается в следующем.

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

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

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

Reactgular
источник
2
Все получилось великолепно - побежал из той компании как можно быстрее и с тех пор был счастлив.
Мэтт Кашатт
0

Был ли это вопрос об интервью на Java, если да, возможно, он хотел проверить ваши навыки с помощью переопределения «хэш-кода» и «равно».

Вам придется переопределить эти два метода и использовать переопределенный метод equals, чтобы остановить рекурсию при сравнении A с A.

Без переопределения, ваше сравнение «объекта» от A до B, от A до C и от A до A все будет иметь значение true, но после переопределения, только когда объект A по сравнению с объектом A вернет true, тогда как другие сравнения вернут false.

rpatali
источник