Якщо ваш алгоритм правильний, чи має значення, скільки часу вам знадобилося написати? [зачинено]


11

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

Існує зразок виклику, який пропонує вам написати алгоритм, який може вирішити проблему типу Тауер Ханой . Враховуючи ряд кілочків та дисків, початкову та остаточну конфігурацію; Ваш алгоритм повинен визначити найменші кроки, які можна отримати, щоб дійти до остаточної конфігурації та вивести ці кроки.

Цей зразок виклику дає 45-хвилинний ліміт часу, але дозволяє все-таки перевірити свій код, щоб побачити, чи проходить він, як тільки закінчиться термін.

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

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

Це мене здивувало, хоча насправді це насправді важливо, що це зайняло мене так довго? Я маю на увазі, це знак того, що мені не вдасться влаштуватися на роботу в подібному місці (не лише Facebook, але Google, Fog Creek тощо) і мені потрібно знизити мої сподівання, або чи не факт, що я насправді пройшов з моєї першої спроби, хоча це зайняло занадто багато часу, щоб сприйняти як добре?


12
Тут було важливо - це достатньо реально для вас?

2
Чому ви вважаєте, що не працюючи на велику назву .com означає, що ви знижуєте свої прагнення?
mouviciel

@mouviciel Я точно не мав на увазі зниження своїх прагнень працювати з великим ім’ям .com, але більше схожий на роботу в компанії, де програмування є головною роллю порівняно з роботою в компанії, яка займається чимось іншим, як роздріб, де ніхто не розуміє, що ти робиш.
JD Isaacks

5
LOL у програмі Fog Creek, що входить до Facebook та Google.
georgiecasey

Відповіді:


42

На практиці це робить справу , як довго вона приймає вас. Те, що може вирішити проблему за 45 хвилин, - все інше рівне - у п’ять разів продуктивніше, ніж те, що займає 4 години, а отже, більш привабливе для роботодавця.

Тим не менш, ви не кажете, чому вам потрібно було чотири години, щоб вирішити цю проблему.

  • Ви були найкращі (ситий, не стомлений, повністю зосереджений)?
  • Чи була чітко визначена проблема, чи вам потрібно було зробити додаткові дослідження самостійно?
  • Чи доводилося вам вчитися новому, щоб це зробити?
  • Були інструменти знайомі чи ні?
  • тощо.

Будь-яке та все це може впливати на час, який вам потрібен, і насправді важливіше вміти вирішувати проблему під тиском, не розповідаючи про це все та підручними інструментами, оскільки це відбудеться під час вашої кар’єри і, як правило, в такій точці, коли комусь дуже важливо, чи вдасться ви чи ні.


Дякую за вашу відповідь. Щоб відповісти, чому це зайняло у мене багато часу, одна частина полягає в тому, що у мене виникли проблеми з розумінням того, що це насправді потрібно зробити, як тільки я зрозумів цю частину, мені все-таки довелося трохи подумати, щоб придумати план. Наприклад, якщо диск блокує диск, я хочу його перемістити, і мені потрібно його перемістити спочатку, куди слід його перемістити. Фактично програмувальна частина була найкоротшою, але все це додало часу.
JD Isaacks

@JohnIsaacks Отже, проблема полягала в тому, що ви були незнайомі з баштами Ханої. Більшість програмістів, яких я знаю, були знайомі з нею, коли навчали про рекурсію (кожен рух диска по суті є "переміщенням диска над мною на вільний кілочок", який красиво відображає рекурсію). Ви отримали офіційну освіту і якщо так, то на якому рівні?

@ ThorbjørnRavnAndersen, я не вивчив жодного програмування в школі. Я самоучка, я вчився на роботі, за книгами, експериментуючи і т. Д. Я не був знайомий з грою (за винятком пам’ятання подібної гри, яку грали на планеті мавп), мені довелося Google навіть знати, що це називається "Вежі Ханої". Я розумію рекурсію (принаймні, я думаю, що це роблю), і я її тут використав. Але просто вирішити головоломку було б для мене набагато простіше, складніше було: «Який візерунок щоразу дає найменшу кількість рухів».
JD Isaacks

Програмування @JohnIsaacks дуже схоже на гру на фортепіано - ви можете добре поправитись, але щоб отримати справді хороший досвід, ви повинні навчитись робити справи правильно досвідченим викладачем. Не могли б ви детальніше розказати, як ви могли вирішити головоломку, але важко знайти частину "це оптимально"?

Я міг би зробити рекурсивну функцію, яка переміщує шматок на місце, переміщує будь-який блокуючий шматок із шляху, а потім починається з наступного твору. Починаючи з найбільшого шматка і закінчуючи останнім найменшим шматочком. Частина "це оптимально" походить від переміщення блокуючого елемента. Залежно від того, куди ви її перемістите, це може створити додаткові непотрібні кроки. Наприклад, переміщення 1 на 3 потім блокує 3, і його потрібно буде знову перемістити, коли настане час переміщення 3, але залежно від поточної конфігурації цього неможливо уникнути.
JD Isaacks

13

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

Я можу придумати п'ять різних типів вирішення проблем:

Тих, хто...

  1. ... може вирішити проблеми швидко , за допомогою чистого та ефективного рішення.
  2. ... може вирішити проблеми швидко , але з брудним і неефективним рішенням.
  3. ... може вирішувати проблеми повільно , але закінчувати чисте та ефективне рішення.
  4. ... може вирішувати проблеми повільно , але закінчується брудним і неефективним рішенням.
  5. ... не вдається вирішити проблеми ні швидко, ні повільно.

Тест у стилі Facebook явно знищує кандидатів №3, №4 та №5, оскільки він має обмеження у часі, тому ми знаємо, що цей тест призначений для роботодавців, які визначили, що вони повинні наймати лише №1 або, можливо, №2 кандидатів ( залежно від подальшого скринінгу).

Деякі приклади:

  • Роботодавець, як Facebook, може шукати лише програмістів №1 , оскільки вони можуть дозволити собі величезні зарплати програмістам суперзірок.
  • Роботодавець, який має великі обсяги разових продажів (як деякі магазини веб-дизайну), може захотіти лише розробника №2 , який дешевший, ніж настільки ж ефективних розробників №1.
  • Роботодавець, який має спеціалізовану проблемну область (наприклад, написання програмного забезпечення для отримання позики), може прийняти розробника №3 над розробником №1 , оскільки розробник геніального подвійного ступеня може бути надто дорогим, або їх важко знайти.
  • Роботодавець, який не хвилює або має обмежений бюджет з різних причин, може бути добре з розробником №4 .
  • № 5 розробників наймають фірми, які не знають, що шукають, і не вдається перевірити цих заявників.

5

Башта Ханой? Це було одне з перших завдань програмування, яке я мав на своєму курсі першокурсника в університеті (відразу після Фібоначчі - так, я мав заняття з одним із тих функціональних виродків програмування :). І я навіть не в галузі інформатики, я в комп'ютерній техніці.

І все-таки більшість так званих "програмістів" не можуть правильно написати такий алгоритм, оскільки більшість програмістів жахливі. (пошук додаткової забави у fizzbuzz)

У будь-якому випадку, як тільки ви пройшли певний поріг, я думаю, що ваші навички програмування не мають значення стільки, скільки ваша здатність закінчувати проекти, ваша стійкість проти труднощів і т. Д. І, здається, ви пройшли його точно.

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

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


3

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

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


0

Мати час, але не розумійте, що ви дурні, якщо це займе у вас більше часу. У багатьох людей речі «запам’ятовуються». Вони практикують застосовувати такі прийоми, як рекурсія, настільки, що вона набуває 2cd характеру. Це не те, що вони розумніші, вони просто потренувалися до точки 2cd природи, і ви теж можете!

Розглянемо наступну математичну задачу: 2 + 2 =?

Якщо ви відразу зрозуміли, що відповідь було 4, це не тому, що ви розумні, а тому, що це 2cd характер. Дитина, яка вчиться додавати, може бути змушена пройти основні операції підрахунку, щоб отримати відповідь. Але ця дитина може мати потенціал, щоб перевершити дорослого.


-1

Людей насправді не хвилює, скільки часу ти витрачаєш на щось; просто дотримуйтесь своїх термінів і все добре.


7
Тож коли термін закінчується "45 хвилин відтепер", а ви закінчите через чотири години, людям все одно.

1
Що означає Мехрдад, це те, що ви можете працювати понаднормово, щоб дотриматись термінів: D
quant_dev

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

-1

Це досить напружено, мені потрібно було б прочитати про те, що є башта Ханой -15хв, запустити IDE, створити пусте рішення -5хв, тож це лише 25 хвилин, щоб вирішити проблему. Просто написання коду з усіма сантехніками, як безпечні класи з гарним дизайном інтерфейсу, зажадає певного часу -10 хв, тому для реальної ідеї залишилося 15 хвилин. Залежно від того, що є башта на Ханої, її може бути достатньо, трохи не може бути. І іноді мені просто потрібно дозволити проблемі вирішити себе, коли я працюю над іншими проблемами, тому що я не бачу рішення прямо там. Таким чином, це вирішується безкоштовно в паралельній нитці, але це не відбувається за мить.

Так чи інакше, це одна з найбільших компаній, тому вони можуть робити все, що завгодно. Але обмеження часу є одним з найгірших факторів інтерв'ю ІМХО, я завжди відчуваю себе тиском, поспішаю, не можу зробити все чисто і не можу зосередитись на всіх деталях, які дуже важливі, коли насправді працює. :) Звичайно, ви можете швидко вирішувати рішення, як-от, встановити доступ адміністратору, щоб все працювало + 'SELECT * FROM pass WHERE usr == ' + user_input, але для будь-якого безпечного та добре написаного завдання я би пишався, мені знадобиться певний час і 45 хвилин - це дуже інтенсивно.


1
Я думаю, що вони хочуть людей, які просто пам’ятають, що є проблемою Тауер Ханойської (це класика).
Quant_dev

Запуск IDE та створення порожнього проекту займає п'ять хвилин? Якщо ви ще не знаєте Башти Towers Of Hanoi, принаймні робіть їх у зворотному порядку, щоб IDE завантажувався (очевидно, від VM через Інтернет), поки ви досліджуєте!
Брайан Боттчер

У такому тесті вони не обов'язково шукають «гарного дизайну інтерфейсу» та «сантехніки» - я б очікував, що вони хочуть побачити ваше розуміння проблеми та здатність сформувати алгоритм її вирішення. Якби мова не була обмеженням, використання чогось на зразок Java та Eclipse - це останнє, що я б робив. Я б використовував Python та мінімальний текстовий редактор / компактний IDE. (Не кажучи про те, що ви самі використовуєте Java; просто скажіть ...)
окулус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.