У когось є якісь хороші запитання типу FizzBuzz, які не є проблемою FizzBuzz?
Я беру інтерв’ю у когось, і ФБ є відносно добре відомим і не таким важким для запам’ятовування, тому моя перша зупинка в пошуку ідей - це моя нова залежність ТАК.
У когось є якісь хороші запитання типу FizzBuzz, які не є проблемою FizzBuzz?
Я беру інтерв’ю у когось, і ФБ є відносно добре відомим і не таким важким для запам’ятовування, тому моя перша зупинка в пошуку ідей - це моя нова залежність ТАК.
Відповіді:
Я бачив невеликий перелік відносно простих проблем програмування, які використовувались для відсіювання кандидатів, як і FizzBuzz. Ось деякі проблеми, які я бачив, у порядку збільшення складності:
Вони були для Java, і ви можете використовувати стандартні бібліотеки, тому деякі з них можуть бути надзвичайно простими (наприклад, 6). Але вони працюють як FizzBuzz. Якщо у вас є уявлення про програмування, ви зможете робити це досить швидко. Навіть якщо ви погано знаєте мову, ви, принаймні, зможете дати ідею, як щось робити.
За допомогою цього тесту один із моїх попередніх начальників побачив усе: від людей, які пройшли це все досить швидко, до людей, які могли зробити найбільш досить швидко, до одного хлопця, який не міг відповісти ні на один через півгодини.
Слід також зазначити: він дозволяв людям користуватися його комп’ютером, поки їм давали ці завдання. Їм було спеціально доручено, що вони можуть користуватися Google тощо.
Можливо, це не відповідає прямо на ваше запитання, але я не впевнений, що вам потрібно придумати іншу проблему. Окрім того, що його «легко запам’ятати», питання FizzBuzz є просто «легким», і в цьому полягає суть. Якщо особа, з якою ви берете інтерв'ю, входить до класу людей, яким FizzBuzz є "добре відомим", то вони потрапляють до класу людей, яких питання типу FizzBuzz не відфільтрують. Це не означає, що ви наймаєте їх на місці, але це означає, що вони повинні мати змогу продемонструвати це і перейти до м'яса інтерв'ю.
Іншими словами, будь-хто, хто знаходить час, щоб прочитати Coding Horror , варто взяти подальше інтерв’ю. Просто попросіть їх дуже швидко виписати рішення, коротко обговорити його (наприклад, як ви це перевірити?), А потім перейдіть до наступного питання. І як сказано в статті, "по-справжньому вражає те, скільки кандидатів не здатні виконувати найпростіші завдання програмування".
Будь-який із ранніх проектів від Project Euler , мабуть, був би непоганим.
Наприклад:
Завдання 25
Послідовність Фібоначчі визначається відношенням рецидиву:
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
Отже, перші 12 термінів будуть такими:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
12-й член, F12, - перший термін, який містить три цифри.
Який індекс першого доданка в послідовності Фібоначчі, який містив 1000 цифр?
Я виявив, що перевірка рядка, якщо це паліндром - досить простий, який може бути пристойним бур’яном.
scalar(reverse 'foo') == 'foo'
.
Я хотів запитання FizzBuzz, яке не стосується оператора модуля. Тим більше, що я зазвичай беру інтерв’ю у веб-розробників, для яких оператор за модулем просто не так часто з’являється. І якщо це не те, з чим ви регулярно стикаєтесь, це одна з тих речей, яку ви шукаєте кілька разів, коли вам це потрібно.
(Звичайно, це концепція, з якою, в ідеалі, ви мали зіткнутися десь на курсі математики, але це вже інша тема.)
Отже, те, що я придумав, - це те, що я, уявно, називаю « Трійки в зворотному напрямку» . Інструкція така:
Напишіть програму, яка виводить у зворотному порядку кожен кратний 3 від 1 до 200.
Зробити це в звичайному порядку легко: помножте індекс циклу на 3, поки не дійдете до числа, що перевищує 200, а потім вийдіть. Вам не потрібно турбуватися про те, скільки ітерацій закінчити після, ви просто продовжуєте рухатися, поки не досягнете першого значення, яке занадто велике.
Але повертаючись назад, ви повинні знати, з чого почати. Деякі можуть інтуїтивно зрозуміти, що 198 (3 * 66) є найбільшим кратним 3, і як такий, жорсткий код 66 у циклі. Інші можуть використовувати математичну операцію (цілочисельне ділення або підлогу () на діленні з плаваючою точкою 200 та 3), щоб з’ясувати це число, і, роблячи це, надати щось більш загальнодоступне.
По суті, це така сама проблема, як і FizzBuzz (перегляд значень та їх роздруківка із закруткою). Цю проблему вирішити, яка не використовує нічого настільки ж (відносно) езотеричного, як операція за модулем.
print [x for x in xrange(3, 200, 3)][::-1]
Інші поширені - Фібоначчі, зворотний рядок, підрахунок кількості бітів, встановлених у байті. Проект Ейлер також має велику колекцію зростаючих труднощів.
Для чогось справді надпростого, що можна зробити за 10 секунд, але прибрало б тих людей, які буквально нічого не можуть запрограмувати , спробуйте ось що:
Запитайте: покажіть мені (на папері, але краще на дошці), як ви міняєте місцями значення двох змінних.
Це не була моя ідея, але її опублікував хтось на ім’я Джейкоб у коментарі до блогу про оригінальне питання FizzBuzz.
Яків продовжує:
Якщо вони не починають зі створення третьої змінної, ви можете майже списати цю людину. Я виявив, що можу вирізати на третину до половини своїх (правда, на той момент непрограмованих) заявників лише цим питанням.
Після цього коментаря до вихідного допису в блозі відбувається подальша цікава дискусія щодо способів виконати заміну цієї змінної, не вимагаючи третьої змінної (додавання / віднімання, xor тощо), і звичайно, якщо ви використовуєте мову, яка підтримує це в одній заяві / операції це може бути не таким хорошим тестом.
Хоча це не моя ідея, я хотів опублікувати це тут, оскільки це настільки елегантно просте, легке запитання, на яке може (і має відповісти) приблизно 10 секунд той, хто написав навіть найпростіші програми. Він також не вимагає використання явно незрозумілих операторів, таких як оператор modulo, з яким багато людей, які в іншому випадку є досить пристойними програмістами, просто не знайомі (що я знаю з власного досвіду).
Попросіть їх написати додаток, щоб повернути множники заданого числа. Це легко зробити і важко зробити добре за короткий проміжок часу. За невеликий проміжок часу ви можете побачити їхній стиль та спосіб їх продумування проблем.
Якщо це співбесіда на C / C ++, переконайтеся, що людина знає про вказівники.
Загальне - простий алгоритм ([одинарний / подвійний] зв’язаний список). Запитайте про складність додавання в кожному випадку (на початку, в кінці, оптимізація ...)?
(Загальне) Як ви знайдете min та max з масиву (розмір N) лише за допомогою порівнянь 3 * N / 2?
C / C ++: Як би ви оптимізували кілька "strcat" до буфера?
Перегляньте 6.14 із C ++ FAQ Lite:
Як щодо: Я хочу використовувати одне ціле число для зберігання кількох значень. Опишіть, як це могло би працювати.
Якщо вони не мають уявлення про бітові маски та операції, вони, мабуть, не можуть вирішити інші проблеми.
Я попросив своїх кандидатів створити програму для обчислення факторіалу даного числа будь-якою псевдомовою на їх вибір. Цю проблему досить легко вирішити, і вона добре підходить для природних подальших запитань (які часто можна задати) щодо рекурсії.