Я провалив 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";
     }
  }
 }

Як ви бачите, я переплутав булі, які повинні мати синтаксис i% 3 == 0; Якщо я добре пам’ятаю це питання, я також ставлю інше, а не інший з isThree && isFive. Я був досить підкреслений, але це не привід для пропуску простої проблеми.

Отже, питання полягає в тому, наскільки важливою є можливість виробляти робочий код на місці щодо інших факторів, таких як досвід та особистість? Наприклад, чи буде вищезазначений код вимикачем угод?


31
Я думаю, що те, що ви використовували оператор модуля, є досить хорошим
Ryathal

9
Ви також не роздруковуєте число, коли воно не є кратним 3 або 5. Те, що ви не згадували про те, що жодним чином, розміщуючи це запитання, також поставило б дуже скептично.
whatsisname

13
Як хтось може відповісти на це від імені ваших інтерв'юерів?
pdr

5
Тангенціальна порада - зробіть проблеми з проектом euler 1-10, і ви матимете справу з багатьма типовими питаннями, які вам будуть задані як "чи можете ви програмувати - напишіть цей код"

20
Я не думаю, що я наймав би когось, хто не написав FizzBuzz, але IMHO ви не змогли ідеально написати синтаксис на дошці, це щось інше.
Майкл Шоу

Відповіді:


44

Сенс FizzBuzz полягає в тому, щоб показати, що ви насправді знаєте, як програмувати , а не що ви запам'ятали всі найтонші правила синтаксису мови, в яку вас запросили запрограмувати (хоча це має значення, якщо вони хочуть знати, наскільки досвідчені ти в мові).

Якщо ви потрапили так далеко в стрімке середовище інтерв'ю і можете показати, що ви розумієте помилки, які ви зробили, я б сказав, що ви пройшли.


Погодився, не намагався натякнути, що це я запам'ятав відповідь. Це те, що я відчуваю себе досить здібним програмістом, але відчуваю, що маю лише одну проблему програмування і не дуже добре в ній - це дуже погане відображення моїх здібностей. Вони також нічого не сказали про проблему. Я не усвідомлював помилки своїх шляхів, поки не зайшов у машину і не почав їхати додому. Тоді це був OMG whyyy !! реакція.
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 хвилин.
Білл

@Bill - Які відповіді на цю проблему ви бачите? Я просто не розумію, як той, хто не мав жодного класу програмування, не може знати хоча б стільки, скільки я поставив. Я написав, що, можливо, за півтори до півтори хвилини, і єдина причина, яка пройшла так довго, це тому, що я говорив і писав на дошці одночасно.
ja_programmer

15

Наведений вище код, ймовірно, був би для мене укладенням угод, якби у мене не було ще чого. Якщо вони дотримуються стилю інтерв'ю Майкрософт, то людина, яка поставила вам це питання, ймовірно, заблокує вас - і це часто все, що потрібно.

Мене бентежить те, що інтерв'юер не питав вас про цей код. Хороший інтерв'ю бачив достатньо власного коду, щоб знати, що люди роблять помилки - особливо коли поспішають. Зазвичай вони кажуть: "Тепер ви бачите щось не так з цим кодом?" "Ні? Ну давайте перевіримо". Ви придумуєте кілька наборів результатів, а потім запускаєте їх через функцію. Тоді ви кажете: "О, лайно, це не вийшло". "Гаразд, як би ви це виправили ..." тощо. Якщо ви пережили цей діалог, він насправді вражає і демонструє здатність критично мислити, придумувати тестові випадки та налагоджувати власний код.

Також зауважте, вони зазвичай не шукають "робочого коду". Хто все-таки виробляє цю першу спробу? Але логічно правильно з керуванням помилками та хорошими тестовими наборами є хорошою метою.

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

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


Я погоджуюся, що код також буде для мене вимикачем угод (я був у деяких провідних посадах, де мені потрібно було переглянути код). Я очікував, що вони поставлять мені ряд проблем з програмуванням і виконають те, що я вважав, що це "традиційний" підхід, який би провів мене через проблему, якщо це буде потрібно. Як ви згадали, "Дивіться щось не так з цим кодом" негайно відмовив би від мене. Я не очікував FizzBuzz і думав, що це вправа на швидкість. І я def нервував, не спав багато ночі раніше. Радий почути, що ти влаштувався на роботу мрії. Я продовжую співбесіду, щоб отримати і моє!
ja_programmer

@ja_programmer добре fizzbuzz - вправа на швидкість. Ви повинні виконати його менше ніж за 2 хвилини. Вони не перевіряють ваші здібності до вирішення проблем, а лише ваша здатність швидко писати простий код. Також мене запитали "Чи бачите ви якісь проблеми з цим кодом?" коли код був цілком правильним, і вони просто намагалися оцінити мою впевненість або роздягнути мене - ще не вирішили.
Джонатан Хенсон

Хороший момент, вони могли б сказати, що якщо це було правильно. Однак я думаю, що в цьому випадку мені потрібен був правильний присмак головою, який "будь-які проблеми з цим кодом" отримали б. Якби я пережив простий тестовий випадок, як звичайна людина, я помітив би, що моя логіка була неправильною. Крім того, що стосується вашого питання, я збираюся поїхати з
трьома

2
+1 для No? Well let's test it. Я прошу кандидатів написати інтерв'ю у інтерв'ю. Я також змушую їх написати одиничний тест. Іноді їх фіз-звук виходить з ладу, але тест їх виявляє це, і змушує їх виправити - це добре. Хлопці, які отримують відмову, - це ті, хто пише невдале рішення, а потім пише тест, який цього не вдається виявити. Я запитую їх, чи задоволені ви цим тестом, якщо вони є, то коли вони не зможуть.
Qwerky

12

Я мав би сказати "ні", але не з тієї причини, яку ви назвали, а з тим, що ви поставили розділ FizzBuzz останнім. З тим, як працює ваш код, він ніколи не надрукує FizzBuzz, коли ви цього очікуєте. Як зауважив Лі, він надрукує його для кожного значення, яке не ділиться на 3 або 5.

Але головний момент - це ти вчишся на цьому. Мені подобається те, що ти тут питаєш про те, як ти міг зробити краще. Обов’язково виконайте кілька загадок з кодом та вивчіть загальні питання інтерв'ю. Крім того, можливо, спробуйте приурочити собі час або зробити щось інше, що б посилило тиск, щоб ви могли спробувати імітувати почуття, яке ви збираєтеся отримати на співбесіді. І підготуйте, підготуйте і зробіть більше підготовки до інтерв'ю, якщо ви дійсно хочете вибити його з парку.


3
Він буде друкувати FizzBuzz, коли iйого не поділити на 3 або 5.
Лі

1
Так, я це розумію. Я справді не знаю, що я думав.
ja_programmer

@ Вибачте, ти маєш рацію, я мав на увазі, що він ніколи не надрукує, коли він цього захоче.
Девід Пітерман

1
@mattnz Ні, але я сподіваюся, що хтось, що претендує на трирічний досвід, зможе написати функціонування, якщо заява, і навіть якщо вони помиляються, зможе точно сказати мені, де вони пішли не так. (без образи на ОП, просто намагаюся бути максимально чесним)
Девід Пітерман

6
@mattnz: Мене менше турбують помилки та компіляція, ніж те, що логіка програми абсолютно неправильна. Я міг би жити з помилкою isThree = я% 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;
    }
}

2
Ваш другий приклад занадто заплутаний.
Брайан

7

Я даю людям тривіальні проблеми програмування, які вони мають робити на дошці. Незалежно від того, чи не виникає помилка в коді, це зовсім не рішення. Натомість я дбаю про низку поведінкових проявів під час написання кодексу. Це інтерактивна робота, і я знаю багато про кандидатів, поки це відбувається.

Я детальніше розбираюся в "тестуванні" дошки під час інтерв'ю: законний спосіб створити резервну копію коду (дошки)?

Звичайно, ваш інтерв'ю може бути не таким, як я. Але цілком можливо, що ви пройшли співбесіду зі мною , створюючи код, який є маленьким крихітним шматочком, і цілком можливо, що ви не змогли з однаковим кодом.


1
дякую за посилання Це було досить добре прочитане. Це все, про що я чув (кілька років тому) під час інтерв'ю з підготовчим класом. Хотілося б, щоб я чув вашу пораду перед цим минулим інтерв'ю. Мені не задавали жодних питань, але я також не збирався подавати інформацію. Добре, можливо, трохи, але я думаю, що більшість із цього було пробурмовано. Я візьму до уваги вашу пораду і використаю її у (сподіваюсь, скоро) майбутньому інтерв'ю, яке у мене є. Дякую!!
ja_programmer

4

Якби я оцінював це, я б шукав наступні речі:

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

-

Важко сказати на №1. У вашому запитанні зазначено, що у вашій проблемі не було частини "номер друку", і ваше рішення насправді цього не включає. У мене немає іншого вибору, як прийняти ваше слово, але якщо насправді це була класична проблема FizzBuzz, яка включала в себе друк цифр, які не поділилися ні на один, то це здається, що ви перейшли до рішення, перш ніж повністю зрозуміти вимоги, які було б відміткою.

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

Здається, ви не зробили №4, що позначило б вас. Надалі я рекомендую зробити крок назад з дошки та переглянути своє рішення, перш ніж викликати його. Я також хотів би (не вимагаючи) пройти пару одиничних тестів для вашого рішення, які б швидко продемонстрували, де ви заплуталися.

Вони не дали вам шанс на №5, що шкода. Але справа в тому, що я не хочу того, хто думає, що кожен рядок коду, який вони коли-небудь писали, - це чисте золото, яке неможливо було б покращити, а скоріше хтось готовий прийняти відгуки про його рішення та взяти участь у розмові про його підхід .

-

Отже, якби я оцінював це поодинці, я би голосував "Не наймайте". Такі речі є свого роду вимірюванням продуктивності, а не програмування , але оволодіння ним все ще може допомогти вашій кар'єрі. Тож мої, рекомендації щодо майбутніх інтерв'ю з технікою будуть:

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

  2. Задайте питання щодо проблеми, щоб підтвердити свої припущення.

  3. Перш ніж оголосити про своє рішення закінченим, відступіть з дошки та перегляньте його, і пройдіть кілька простих тестових примірників.


Хоча я погоджуюся з цим як з основною метою інтерв'ю, це не сенс фізбузу. Fizzbuzz оцінює одне і лише одне. Чи можете ви швидко та правильно написати простий код? Зазвичай інтерв'юери хочуть, щоб це питання було виконано менше ніж за 2 хвилини. Я знаю, це не все, але саме для цього питання розраховане.
Джонатан Хенсон

1
Сенс fizzBuzz - це те, що інтерв'юер хоче цього зробити. Якби я використовував fizzBuzz або подібну вправу, це те, що я б шукав.
JohnMcG

1
Звичайно, будь-яке запитання про інтерв'ю - це те, що інтерв'юер хоче використати для оцінки того, що їх цікавить. Моя думка полягає в тому, що FizzBuzz - це дуже бідне питання для оцінки чогось іншого, окрім "Чи може він / вона швидко написати правильний код?" Насправді це технічно не досить складно, щоб оцінити навички критичного мислення. Якщо хтось серйозно зациклюється на цьому питанні, ви навіть хочете їх у своїй команді? Це як найняти інженера, який не може провести базовий аналіз. Хоча всі хочуть переконатися, що Інженер знає його основний обчислення - він справді не підлягає обороту.
Джонатан Хенсон

2

Попросити когось вирішити проблему, не даючи їм можливості отримати зворотній зв'язок щодо їх вирішення - сумнівний підхід, оскільки їм не дозволяється вдосконалюватися.

Весь цей тест говорить нам про те, що ви не продемонстрували дуже гарних навичок вирішення проблем.

Це може бути одним із елементів у рішенні прийняти на роботу вас чи ні, але для мене це, безумовно, не повинно бути єдиним.

Якби вони надали вам середовище тестування чи виконання, помилки, які ви зробили, були б менш виправданими.


1
Є час і місце, щоб покращити свої здібності, але співбесіда на роботі - це не так.
RokL

Чи ви маєте на увазі, що рекрутер не повинен дбати про можливості кандидата вдосконалитись?
guillaume31

1
Поліпшення себе відбувається в масштабах часу довше години. Для рекрутера це не важливо.
whatsisname

Я думаю, враховуючи, наскільки легкою була проблема, я не мав би робити жодних помилок, незважаючи на те, що я був під стресом. Зважаючи на це, я думаю, що є підстави для "покращення" таких проблем, якби інтерв'юер трохи підштовхнув кандидата. Навіть кажучи щось таке просте, як "ви думаєте, ви могли взагалі покращити це?" дасть кандидату натяк, що щось не так, або він / вона міг би зробити краще. У мене такого коментаря не було.
ja_programmer

@whatsisname: Я думаю, що це має бути важливим для рекрутера, але не так, як ви могли б подумати. Якщо кандидата відхилено, рекрутеру потрібен зворотній зв'язок, щоб зрозуміти, чому він може подати кращих кандидатів в компанію в майбутньому, і проінструктувати цього кандидата, як вони можуть стати більш сильним кандидатом у майбутньому. Я думаю, що тут є місце для взаємної вигоди.
alroc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.