Я провалил FizzBuzz, вы бы меня наняли? [закрыто]

27

Я разработчик со степенью CS и имею опыт работы на нескольких языках почти 3 года.

Сегодня у меня было интервью, в целом оно прошло довольно хорошо, я подготовился к большинству вопросов и чувствовал себя готовым ко всему. В конце интервью они задали мне ОДИН программный вопрос ... такую ​​проблему, как FizzBuzz (без печати номера части). Я считаю, что допустил слишком много ошибок и поэтому «провалил» это. Вся надежда потеряна для меня?

Вот мой код:

  void FizzBuzz()
  {
    for(int i = 0; i <= 100; i++)
    {
      bool isThree = i % 3;
      bool isFive = i % 5;

     if (isThree)
     {
         print "Fizz\n";
     }
     else if(isFive)
     {
         print "Buzz\n";
     }
     else
     {
         print "FizzBuzz\n";
     }
  }
 }

Как вы можете видеть, я испортил bool, который должен иметь синтаксис i% 3 == 0; Если я правильно помню вопрос, я также добавляю else вместо elseif с помощью isThree && isFive. Я был очень взволнован, но это не оправдание для пропущенной простой проблемы.

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

ja_programmer
источник
31
Я думаю, что тот факт, что вы использовали оператор модуля достаточно хорош
Ryathal
9
Вы также не распечатываете число, когда оно не кратно 3 или 5. Тот факт, что вы не упомянули об этом при публикации этого вопроса, также очень скептически.
whatsisname
13
Как кто-нибудь может ответить на это от имени ваших интервьюеров?
фунтовые
5
Тангенциальный совет - выполняйте задачи проекта Эйлера 1-10, и вы будете иметь ответы на многие вопросы стандартных типов, которые будут заданы вам как «можете ли вы программировать - напишите этот код»
20
Я не думаю, что я найму кого-то, кто не смог написать FizzBuzz, но ИМХО вы не смогли идеально написать синтаксис на доске, а это совсем другое.
Майкл Шоу

Ответы:

44

Смысл FizzBuzz в том, чтобы показать, что вы действительно знаете, как программировать , а не то, что вы запомнили все более тонкие синтаксические правила языка, на котором вас просили программировать (хотя это имеет значение, если они хотят знать, насколько опытный ты на языке).

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

Роберт Харви
источник
Согласился, не пытался понять, что это я запоминаю ответ. Это то, что я чувствую себя достаточно способным программистом, но чувствую, что у меня только одна проблема в программировании и плохое решение этой проблемы - это действительно плохое отражение моих способностей. Они также ничего не сказали о проблеме. Я не осознавал свою ошибку, пока не сел в машину и не поехал домой. Тогда это был Боже мой! реакция.
ja_programmer
Сначала они задали вам вопрос FizzBuzz? Если они не закончили интервью сразу, вы прошли. Интервьюеры рассматривают другие факторы помимо простого теста кодирования; Хорошие работодатели хотят людей, которые умеют критически мыслить и решать проблемы.
Роберт Харви
Они проводили большую часть времени, спрашивая меня о моем резюме, спрашивая о различных технологиях, которые я использовал, и как я их использовал. А потом они задали мне проблему программирования. Затем они задавали мне вопросы о себе. Затем я задал ряд вопросов, пожал им руку и ушел.
ja_programmer
4
Хорошие интервьюеры прекращают собеседование, когда больше не будет никакого интереса вас нанимать, что должно было произойти сразу после FizzBuzz, если вы провалили тест. Это не значит, что они все равно будут вас нанимать, но это значит, что вы не провалили собеседование.
Роберт Харви
4
@RobertHarvey - не все прекратят интервью тут же. С моим недавним кандидатом, который потерпел неудачу в FizzBuzz, я продолжил интервью, пытаясь понять, сможет ли он спасти вещи. Другими словами, я был готов дать пропущенное упражнение из-за стресса интервью.
26

да

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

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

Я покупаю IDE для проверки синтаксиса, а не нанимаю разработчика, и вы бы поняли другие ошибки в момент первой отладки.

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

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

[Править] Как указал Алекс, есть также реакция и хладнокровие. Лично я пытаюсь избавиться от этого, прежде чем приступать к практическим упражнениям, пытаясь загнать собеседника в замешательство на что-то, немного выходящее за рамки его опыта, но некоторые могут решить объединить их. Время от времени я сталкиваюсь с кем-то, у кого есть только знания в учебниках, и они разбираются в теоретических и базовых вопросах, но серьезно зацикливаются на том, с чего начать практическое упражнение. Некоторые даже не могут понять, с чего начать.

Эти люди именно то, что я хочу отсеять с помощью этого упражнения.

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

Билл
источник
2
Билл, я просто хочу сказать большое спасибо за подробный отзыв. Приятно получить некоторые другие перспективы. Это просто расстраивает - делать ошибки в чем-то простом и знать, что ты лучше этого.
ja_programmer
1
Просто позвольте мне подтвердить то, что только что сказал Билл. Этот вид теста предназначен, главным образом, чтобы увидеть, как люди реагируют под давлением. Вы НЕ должны быть идеальным программистом, работая в этих условиях. Вы просто должны ... работать. В самом деле. От вас ожидают, что вы постараетесь сохранять спокойствие и решать эту проблему так хорошо, как можете. Это именно то, что вы сделали.
AlexBottoni
Это не только не печать чисел, но и неспособность понять, что в 15 случаях вы печатаете не Fizz или Buzz, а FizzBuzz. Это не показывает хорошее решение проблемы. Когда печатать "FizzBuzz", я считаю, самый важный элемент этой головоломки.
Питер Б
Я не использую этот конкретный пример, так как многие подрядные организации заставляют своих кандидатов запоминать его, но по моему опыту люди, которые допускают ошибки в этих упражнениях, обычно оказываются лучшими коллегами. Его логика началась с правильного места, и нет ничего лишнего, это хорошо. Он пропустил то, что вы видели в первой компиляции. Я бы предпочел, чтобы парень, который ошибается 3 раза за 15 минут, тогда это лучше, чем парень, которому требуется 30 минут, чтобы начать.
Билл
@ Билл - Какие ответы на эту проблему вы видите? Я просто не понимаю, как тот, у кого нет одного класса программирования, не может знать хотя бы столько, сколько я положил. Я написал это от минуты до полутора минут, и единственная причина, по которой это заняло так много времени, заключалась в том, что я одновременно говорил и писал на доске.
ja_programmer
15

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

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

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

Кроме того, это может вас удивить, но вы конкурируете со многими людьми, которые даже не могут начать fizzbuzz. Мы склонны полагать, что все остальные обходят деревья b + во сне ... но в действительности они даже не могут вычислить кратные 3 и 5 и использовать оператор модуля. Вы можете быть удивлены тем, насколько лучше вы сделали, чем другие кандидаты.

Мой совет, просто отмахнись. Недавно я брал интервью у крупных компаний-разработчиков программного обеспечения (Microsoft, Amazon и т. Д.), И я впервые прошел такой тщательный процесс собеседования. Я одурачил себя на собеседовании с Microsoft на месте во многом из-за нервов, но я просто не знал, чего ожидать или что именно они искали. Я прибил проблему кратчайшего пути только для того, чтобы взорвать некоторые действительно простые проблемы. Я вытолкнул значения из неправильного конца стека, забыл в int atoi(char* value)реализации, чтоint val = value[i] - '0';дал бы мне целочисленное значение символа и несколько других глупых ошибок. Я был счастлив по большей части интервью, но все еще понимал, почему я не получил предложение. Я должен был понять, что это было не столько отражением моих способностей, сколько индикатором того, что мне просто нужно было продолжать пробовать это, пока я не смогу справиться со своими нервами. В конце концов я собрал несколько интервью с более сложными вопросами и получил работу своей мечты. Это действительно - для большинства людей, которые действительно знают, что они делают, - просто выяснить, что хотят интервьюеры, быть уверенным в себе и дать им это. Это займет некоторое время.

Джонатан Хенсон
источник
Я согласен с тем, что кодекс также будет для меня преградой (я был на некоторых ведущих позициях, где мне нужно было пересмотреть код). Я ожидал, что они зададут мне ряд проблем программирования и сделают то, что я думал, было «традиционным» подходом, вроде того, чтобы помочь мне разобраться в проблеме, если это будет необходимо. Как вы упомянули, «Посмотрите, что-то не так с этим кодом», немедленно предупредили бы меня. Я не ожидал FizzBuzz и думал, что это упражнение на скорость. И я определенно нервничала, не выспалась прошлой ночью. Рад слышать, что ты получил работу своей мечты. Я буду продолжать интервью, чтобы получить мой тоже!
ja_programmer
@ja_programmer хорошо fizzbuzz это упражнение на скорость. Вы должны завершить его менее чем за 2 минуты. Они не проверяют ваши способности решения проблем, а просто вашу способность быстро писать простой код. Также меня спросили "Видите ли вы какие-либо проблемы с этим кодом?" когда код был полностью правильным и они просто пытались измерить мою уверенность или разозлить меня - еще не решили.
Джонатан Хенсон
Хороший вопрос, они могли бы сказать, что если это было правильно. Тем не менее, я думаю, что в этом случае мне нужен был правильный удар головой, который могли бы принести «любые проблемы с этим кодом». Если бы я прошел простой тестовый пример, как обычный человек, я бы заметил, что моя логика была неверной. Кроме того, что касается вашего вопроса, я собираюсь пойти с немного обоими;)
ja_programmer
2
+1 за No? Well let's test it. Я прошу кандидатов написать шипение в интервью. Я также заставляю их писать модульный тест. Иногда их жужжание не проходит, но их модульный тест обнаруживает это, заставляя их это исправить - это нормально. Ребята, которые получают отказ, - это те, кто пишет неудачное решение, а затем пишет тест, который не может обнаружить это. Я спрашиваю их, довольны ли вы этим тестом, если они есть, то есть, когда они терпят неудачу.
Qwerky
12

Я бы сказал «нет», но не по той причине, которую вы указали, а по тому, что вы поместили раздел FizzBuzz последним. При том, как работает ваш код, он никогда не будет печатать FizzBuzz, когда вы этого ожидаете. Как прокомментировал Ли, он напечатает его для каждого значения, не делимого на 3 или 5.

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

Дэвид Петерман
источник
3
Он будет печатать FizzBuzz всякий раз, когда iон не делится на 3 или 5.
Ли
1
Да, я понимаю это. Я действительно не знаю, о чем я думал.
ja_programmer
@ Извините, вы правы, я имел в виду, что он никогда не будет печатать, когда он этого захочет.
Дэвид Петерман
1
@mattnz Нет, но я ожидаю, что кто-то, претендующий на трехлетний опыт, сможет написать действующее заявление if, и даже если он ошибется, сможет точно сказать мне, где он ошибся. (без обид на ФП, просто стараюсь быть максимально честным)
Дэвид Петерман
6
@mattnz: я бы меньше беспокоился об ошибках и компиляции, чем о том, что логика программы совершенно неверна. Я мог бы жить с ошибкой isThree = i% 3, но часть «иначе напечатай FizzBuzz» убивает это для меня. Я бы, вероятно, слегка подтолкнуло собеседника посмотреть, смогут ли они поймать и решить эту проблему, но если нет, то это нарушитель соглашения.
Миско
9

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

Проблема структурирована таким образом, что весь «элегантный» код не может охватить хотя бы один случай.

Приемлемые ответы:

if div3 print fizz
if div5 print buzz
if !div3 && !div5 print x


if div3 {
    print fizz;
    if div5 {
        print buzz;
    }
} else {
    if div5 {
        print buzz;
    } else {
        print x;
    }
}
RokL
источник
2
Ваш второй пример слишком запутанный.
Брайан
7

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

Я более подробно остановлюсь на «тестировании» доски во время интервью: законный способ резервного копирования кода (доски)?

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

Кейт Грегори
источник
1
спасибо за ссылку. Это было довольно хорошее чтение. Это все, что я слышал (несколько лет назад) на подготовительном уроке интервью. Хотел бы я услышать ваш совет до этого прошлого интервью. Мне не задавали никаких вопросов, но я также не приходил и не давал информацию. Ну, может быть, немного, но я думаю, что большая часть этого была пробормотана. Я приму ваш совет близко к сердцу и буду использовать его (надеюсь, скоро) в будущем интервью, которое у меня будет. Спасибо!!
ja_programmer
4

Если бы я оценивал это, я бы искал следующие вещи:

  1. Пытается ли кандидат получить четкое представление о требованиях, прежде чем перейти к реализации? Кандидат пытается решить мою проблему или использовать свои любимые инструменты в своем наборе инструментов программирования? Как кандидат решает проблемы?
  2. Владеет ли кандидат хотя бы одним языком программирования?
  3. Имеет ли кандидат понимание логической логики?
  4. Что делает кандидат, чтобы обеспечить качество своих решений?
  5. Как кандидат отвечает на отзывы о своем коде?

-

Сложно сказать о # 1. В вашем вопросе говорится, что ваша проблема не включала часть «номер печати», а ваше решение фактически не включает это. У меня нет другого выбора, кроме как поверить на слово, но если на самом деле это была классическая проблема FizzBuzz, которая включала печать чисел, которые не делятся ни на одну из них, то звучит так, будто вы перешли к решению, прежде чем полностью поняли требования, которые будет отметкой.

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

Похоже, вы не делали # 4, что отметит вас. В будущем я бы порекомендовал сделать шаг назад от доски и просмотреть свое решение, прежде чем называть его выполненным. Я бы также (без подсказки) прошёл пару юнит-тестов для вашего решения, которые бы быстро продемонстрировали, где вы ошиблись.

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

-

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

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

  2. Задайте вопросы о проблеме, чтобы подтвердить свои предположения.

  3. Прежде чем объявить о своем решении, отойдите от доски, посмотрите на нее и пройдите пару простых тестовых примеров.

JohnMcG
источник
Хотя я согласен с этим в качестве основной цели интервью, это не точка суеты. Fizzbuzz измеряет одно и только одно. Вы можете написать простой код быстро и правильно? Обычно интервьюеры хотят, чтобы этот вопрос был сделан менее чем за 2 минуты. Это не все, я знаю, но для этого и предназначен вопрос.
Джонатан Хенсон
1
Смысл fizzBuzz в том, чего хочет интервьюер. Если бы я использовал fizzBuzz или подобное упражнение, это то, что я искал бы.
JohnMcG
1
Конечно, любой вопрос интервью - это то, что интервьюер хочет использовать для оценки того, что ему интересно. Я хочу сказать, что FizzBuzz - очень плохой вопрос для оценки чего-либо, кроме: «Может ли он / она быстро написать правильный код?» Это не достаточно технически сложно, чтобы оценить навыки критического мышления. Если кто-то серьезно зацикливается на этом вопросе, вы вообще хотите, чтобы он был в вашей команде? Это все равно что нанимать инженера, который не может сделать базовое исчисление. В то время как каждый хочет убедиться, что Инженер знает свое основное исчисление - это действительно не подлежит обсуждению, что он делает.
Джонатан Хенсон
2

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

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

Это может быть одним из элементов в решении принять вас на работу или нет, но для меня это определенно не должно быть единственным.

Если бы они предоставили вам среду модульного тестирования или выполнения, сделанные вами ошибки были бы менее простительными.

guillaume31
источник
1
Есть время и место для улучшения ваших способностей, но собеседование не так.
RokL
Вы подразумеваете, что вербовщик не должен заботиться о способности кандидата улучшить себя?
guillaume31
1
Совершенствование себя происходит на шкале времени дольше часа. Это не важно для рекрутера.
whatsisname
Я думаю, учитывая, насколько легко была проблема, я не должен был делать никаких ошибок, несмотря на то, что находился в состоянии стресса. При этом, я думаю, есть основания для «улучшения» в таких проблемах, как это, если интервьюер немного подталкивает кандидата. Даже говоря что-то простое: «Как вы думаете, вы могли бы улучшить это вообще?» даст кандидату намек на то, что что-то не так, или он / она может сделать лучше. Я не получил такой комментарий.
ja_programmer
@whatsisname: я думаю, что это должно быть важно для рекрутера, но не так, как вы думаете. Если кандидату отказывают, рекрутеру нужна обратная связь, чтобы понять, почему он (и) может представить лучших кандидатов компании в будущем, и проинструктировать этого кандидата, как они могут стать более сильным кандидатом в будущем. Я думаю, что здесь есть место для взаимной выгоды.
Alroc 7.12.12