Я думаю, что это простые вопросы fizzbuzz, перевернуть строку и т. Д., А затем есть определенные вопросы, тогда как, если вы их не видели раньше, трудно найти намеченное оптимальное решение с дополнительным давлением интервью и коротким временем. ограничения. Хуже всего то, что иногда рекрутеры, не имеющие технических знаний, задают некоторые из этих вопросов, и они ищут очень конкретный ответ ... Если вы не дадите оптимальный ответ, они думают, что вы абсолютный идиот. Даже если ваш ответ работает, решает проблему, и хотя он может быть неоптимальным, он не слишком неэффективен ....
Несколько примеров:
Как бы вы перемешали колоду карт? Они ищут метод Фишера-Йейтса http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffleдругие ответы «неправильные» ..... Это не то, что вы, вероятно, узнаете, если только вы не хотели перетасовать карты раньше и специально не искали их. Вы можете наткнуться на него в ходе выполнения ответа, но из того, что я видел, они ожидают, что вы узнаете эту простуду, так что сомнительно, что будет много времени, чтобы позволить найти решение. Другой менее эффективный (но, возможно, более очевидный) способ - создать новый массив с указателем на исходный массив и числом, являющимся случайным числом, а затем отсортировать массив по случайному числу. Затем используйте отсортированный массив для создания нового массива карт. В любом случае, я получил 0 баллов за представление этого рекрутеру.
Другим примером является вопрос о том, как вы обнаружите дублирующийся номер в списке из n чисел от 1 до n-1. Очевидный ответ (который является относительно эффективным с точки зрения времени) состоит в том, чтобы использовать хеш-таблицу для вставки каждого элемента, и если вы найдете один уже вставленный, то вы нашли дубликат. Оптимальный ответ - потому что числа находятся в диапазоне от 1 до n, если дубликатов нет, ожидаемую сумму можно получить как n (n + 1) / n. Затем, если вы суммируете массив, вы получите фактическую сумму, которая на порядок меньше ожидаемой. Таким образом, в основном n - (ожидаемая сумма - фактическая сумма) = повторяющееся число ... Это довольно особый случай .... Я действительно видел что-то раньше в каком-то онлайн-посте о проблемах с собеседованием давным-давно о связанном с тем же трюком, так Я был в порядке ....
Еще один, переверните все слова в строке, не используя дополнительный пробел. Я должен был подумать об этом, и рекрутер был довольно нетерпелив в те 5 минут, которые я думал (разделение и повторное объединение строки в обратном порядке или переход от слова к слову в новый массив очень просты). Я придумал, чтобы найти границу последнего слова, найти конец первого слова и постоянно сдвигать весь список вниз на 1, а затем вставлять соответствующую букву. Затем повторяйте, пока не дойдете до конца списка. Этот метод работал, и интервьюер согласился (он был немного техническим), но он довольно неэффективен. Когда я вернулся домой, я искал оптимальный ответ, и он просто переворачивал список, а затем переворачивал каждое отдельное слово. Некоторые люди могут придумать это,
Теперь это правда, когда вы увидели некоторые из этих проблем, вы можете решить их проще. Потому что есть несколько похожих вопросов с одними и теми же трюками. Я знаю особенно формула n (n-1) / 2 и список чисел имеет несколько вариантов. Но я все еще не знаю, что тестируют эти вопросы. FizzBuzz - это то, что должен делать каждый (хотя я видел варианты, которые не так просты, и в этом случае я начинаю сомневаться, реально ли это для ситуации на собеседовании, не имея возможности вводить / отлаживать код). Некоторые из этих вопросов очевидны, когда вы их видите, но если вы их не видели, они не очевидны. В конце концов, кто-то упоминал, что потребовались годы, чтобы появилась первая правильная реализация бинарного поиска ... Сейчас бинарный поиск настолько очевиден, потому что каждый может прочитать об этом.
Тем не менее, я думаю, что хуже всего то, что нетехнические люди задают вопросы, потому что они не могут оценить ваше решение правильно, хотя и не оптимально. Они просто знают, что ваше решение не является тем, которое представлено, и, следовательно, все неправильно, вы не получаете кредит за попытку. Даже неоптимальные решения часто показывают знание программных конструкций. Если я не программирую игры в покер, мне все равно, насколько хорошо кто-то может перетасовать колоду карт. И даже если бы я показывал им эффективный алгоритм, я уверен, что любой, кто был бы на полпути, мог бы им следовать.
Шаблонные вопросы, по-видимому, просто дают преимущество кандидатам, которые допросили дольше, поскольку они с большей вероятностью увидели больше шаблонных вопросов. Даже FizzBuzz, когда вы впервые видите это, вы можете испугаться, но, как вы видите это снова и снова, вы становитесь более привыкшими к этому. Лучшее, что вы можете сделать, - это решить некоторые задачи, связанные с программированием, которые требуют пользовательской бизнес-логики. Например, создайте некоторый набор данных (массив объектов / записей), а затем создайте несколько бизнес-правил, которые будут применяться к каждому объекту и возвращать ответ .. например, некоторый тип оценки и т. Д., Но очень нестандартные правила). Хотя они, вероятно, видели циклические записи и применяли логику миллионы раз, ваши правила будут уникальными, поэтому, по крайней мере, им придется понимать и успешно применять созданные вами правила.
Допустим, прогнозируемая зарплата и список кандидатов и их топ-3 любимых видеоигр, и, возможно, стартовая зарплата. Кандидаты, которым нравится Zelda, получают штраф 300, кандидаты, которые любят русалку, получают бонус 200. Кандидаты, которым нравятся братья Донки Конг и Супер Марио, но не доктор Марио, получают бонус 300. Кандидаты, которым нравится Metroid или Kid Icarus, получают 200 бонусов и т. Д. ... Это кажется немного безумным, но это покажет вам их способность преобразовывать бизнес-правила в логические программные конструкции и проверять их понимание логической логики. В целом не сильно отличается от fizzbuzz за исключением того, что не используются модули и циклы. Вы, конечно, могли бы дать им список и сделать так, чтобы они просматривали его и выводили результаты на экран, используя также определенные критерии вывода.