avva: (moose)
avva ([personal profile] avva) wrote2013-05-13 01:17 am

альтернатива физзбаззу

Цитирую из подзамочной записи с разрешения автора, который работает в американской компании и интервьюирует программистов:
Интесная закономерность выявляется. Мы начинаем интервью с того, что просим кандидата прочитать вот такой код, и сказать, что он делает. Как бы он назвал эту функцию?

private static int ok(int a, int b) {
   while (a >= b) a -= b;
   return a;
}

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

[identity profile] polenova.livejournal.com 2013-05-13 04:54 am (UTC)(link)
А какой именно ответ от кандидата ожидается?
That function should be called Bullshit?

Для интервью вопрос плохой, функция считает остаток от деления для двух положительных чисел, зависает при нулях, а при отрицательных и вовсе черт и что, но даже если добавить проверку параметров - это идиотский способ считать остаток? Я бы на интервью растерялась от такого вопроса, не потому что не понимаю, что будет делать этот код, а потому что не поняла бы, что, собственно, от меня хотят.

[identity profile] gineer.livejournal.com 2013-05-13 07:14 am (UTC)(link)
Ну, у меня было такое задание -- отсортировать массив чисел от 0 до 255 размером 256 ;)
А когда я в конце заметил, что подобный массив вообще-то и сортировать не нужно,
заметил уже у интервюирующего в глазах такое непонимание,
что решил не продолжать тему.

[identity profile] piter239.livejournal.com 2013-05-13 08:14 am (UTC)(link)
Без гарантии "все числа различные" сортировать таки надо. Гарантия была в задании?

[identity profile] gineer.livejournal.com 2013-05-13 08:27 am (UTC)(link)
"массив чисел от 0 до 255 размером 256"

ну, собственно, я сам тоже не сразу дотумкал, в чом подвох,
хоть и сразу, что он есть.
просто предствьте на более очевидном примере, что ли.
типа массив из 4 чисел, от 0 до 3. ;)

[identity profile] mtyukanov.livejournal.com 2013-05-13 08:49 am (UTC)(link)
Ну и? Типа массив из 4 чисел, от 0 до 3: {2,1,0,1}. Отсортируем, пользуясь знанием о возможных значениях 0..3. Задача на самом деле довольно интересная.

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 09:07 am (UTC)(link)
сортировать все равно не нужно.
Посчитать количество каждого номера и сгенерировать массив.
O(n)

[identity profile] gineer.livejournal.com 2013-05-13 09:14 am (UTC)(link)
да, я тоже так понял, сперва
но, там, всетаки, еще было ЭТО требование -- каждое из чисел встречается один раз. ;)

[identity profile] mtyukanov.livejournal.com 2013-05-13 09:42 am (UTC)(link)
Так "подсчитать количество каждого номера и сгенерировать массив" -- это и есть "сортировать" для данного случая. Если бы под "сортировать" имелось в виду "пользоваться стандартными методами сортировки" -- это было бы просто глупо.

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

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

[identity profile] gineer.livejournal.com 2013-05-13 09:54 am (UTC)(link)
дык... там и была эта оговорка, про "неповторяющиеся числа",
которая обессмысливает вообще сам вопрос
по крайней мере с моей т.з.
с точки зрения интервбюера -- все было ок :)

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 09:57 am (UTC)(link)
Я проверил, это, кстати, стандартный алгритм сортировки, на3ывается сортировка подсчетом или
counting sort.

Так что я был не прав.

[identity profile] unbe.livejournal.com 2013-05-13 07:25 pm (UTC)(link)
http://en.wikipedia.org/wiki/Counting_sort

[identity profile] unbe.livejournal.com 2013-05-13 07:26 pm (UTC)(link)
ой, поздно заметил ваш ответ на собственный комментарий.

[identity profile] piter239.livejournal.com 2013-05-13 09:04 am (UTC)(link)
Берем пример 0 0 0 1

В чем подвох?

[identity profile] gineer.livejournal.com 2013-05-13 09:12 am (UTC)(link)
http://avva.livejournal.com/2625137.html?thread=95997041#t95997041

[identity profile] piter239.livejournal.com 2013-05-13 07:25 pm (UTC)(link)
да это-то сразу понятно.

Непонятно другое: с какой целью (или по какой причине) Вы КЛЮЧЕВОЕ требование -- каждое из чисел встречается один раз

не упомянули ни в первом своем комментарии, ни в ответе на мой прямой вопрос о гарантии "все числа различные"?

[identity profile] polenova.livejournal.com 2013-05-13 11:22 am (UTC)(link)
А что он имел в виду? Отсортировать массив длиной 256? Хотя, зачем тогда длину давать?
Получи я на интервью задачу из поста, я бы в первую очередь испугалась, что функцию написал тот, кто меня интервьюирует и что он ошибки сам не видит. И что тогда делать? Не всякому интервьюеру понравится, если ему сказать, что он дурак, даже в мягкой форме.
Я когда прочитала код, прежде чем думать, что он делает, я озадачилась, что он при входных нулях зацикливается. На интервью я бы, скорее всего, не знала, что отвечать, именно из-за глупости ситуации.
Забавно, что такого рода задачки очень любят давать русские, и никогда - американцы. Зададут дурацкий вопрос и смотрят с видом превосходства. Особенно нелепо, когда на интервью на позицию по вебу, например, просят написать сортировку пузырьком или обойти двоичное дерево. Как будто, если я умею писать сортировку, я что-то в вебе понимаю.

\\Зададут дурацкий вопрос и смотрят с видом превосходс

[identity profile] gineer.livejournal.com 2013-05-13 11:33 am (UTC)(link)
Ага.

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

http://avva.livejournal.com/2625137.html?thread=96002673#t96002673

[identity profile] vrml.livejournal.com 2013-05-13 03:44 pm (UTC)(link)
А зачем бояться не понравиться такому интервьюверу, ведь возникает вопрос, стоит ли идти туда работать - либо к нему в группу, если он интервьюирует для себя, либо вообще в компанию с организационными проблемами, если не для себя. Процесс выбора двусторонний, вы их тоже оцениваете.

[identity profile] polenova.livejournal.com 2013-05-13 06:18 pm (UTC)(link)
Ситуации бывают разные. Если нет специальных причин, я в такие компании не иду. А организационные проблемы есть в любой компании, особенно, если компания большая.

[identity profile] meshko.livejournal.com 2013-05-13 03:16 pm (UTC)(link)
А какие вопросы вам нравятся?
Мне вопрос кажется нормальным. Идея в том, чтобы посмотреть, как кадидат будет читать простой и короткий код и разбираться, как он работает. Зачем бояться сказать интевьюеру о том, что в коде ошибка? Если сказать об этом вежливо, то что страшного может произойти? Есть три вариаента реакции:
1) Да, отлично, это именно остаток и тут он дейсвтительно не проверяет параметры, молодец, следующий вопрос...
2) Упс, да, а я и не подумал, спасибо! Следующий вопрос...
3) Да вы что!! Какая ошибка? Да вы кто такая???

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

[identity profile] polenova.livejournal.com 2013-05-13 07:29 pm (UTC)(link)
Ответ номер один, строго говоря, неверный. У функции различное поведение в зависимости от параметров, откуда я могу знать, какое поведение они имели в виду? (ну кроме двух нулей, там она просто циклится, вряд ли кто-то мог иметь в виду именно такое поведение). Догадываться по неверно написанному коду, что именно имел в виду программист, занятие довольно опасное в реальной жизни. По этому коду можно с уверенностью сказать только что для двух положительных параметров результатом будет остаток от деления, а что они на самом деле хотели написать - да бог их знает. Функция-то private, т.е предназначена для какого-то конкретного класса. При этом static - значит мемберами класса не пользуется. Представить себе дизайн, при котором необходимо имплементировать частный случай системной функции mod в таком виде мне затруднительно, на мой взгляд это хреновый дизайн. Вопрос при этом звучит - "как бы вы назвали эту функцию?". Ну я и назвала - Bullshit, а как еще называется такой венец програмистской мысли? Ответ номер 2 означает что меня интервьюирует человек, который совершает ошибки, непростительные школьнику. Ну номер 3 и обсуждать неинтересно. Если я не умираю с голоду, то я на этом интервью закончу, меня не устраивают все три ответа. Если я умираю с голоду и готова хвататься за любую работу - я пойду формы рисовать на Вижуал Бэйсике - платят столько же и дурацких вопросов не задают.
Хитропопые садисты мне тоже попадались, но с ними тоже вопрос ясен.

[identity profile] meshko.livejournal.com 2013-05-13 08:02 pm (UTC)(link)

Догадываться по неверно написанному коду, что именно имел в виду программист, занятие довольно опасное в реальной жизни.


Вообще-то это то, чем программисты занимаются примерно 50% рабочего времени.

[identity profile] igorbor.livejournal.com 2013-05-14 04:49 pm (UTC)(link)
Вот этого от тебя как раз и хотят. Человек, который способен понять, что "...функция считает остаток от деления..." и далее по тексту - заслуживает того, чтобы продолжать интервью.

Зачем же так сильно?

[identity profile] bakabaka.livejournal.com 2013-05-15 01:46 am (UTC)(link)
Достаточно назвать функцию "not_ok".