Страница 2 из 6

Re: Вопросы с интервью....

Добавлено: 18 ноя 2006, 23:54
Leo Gan
папа Карло писал(а):на днях интервьюировал очередного девелопера. На этот раз для соседней группы... задал тривиальную задачку.... в ней в одном месте позитивное число сделать негативным не используя -1 * х..... ответ потряс меня своей "крутизной" :)

Код: Выделить всё

if ( a < 0 )
{
    int z = 0;

    for ( int i = a; i > 0; i++)
    {
        z++;
    }

    return z;
}
Насколько понял, интервьюируемый хотел предложить решение для int в виде z--. Т.е. от target числа (z) и от source(x) синхронно отнимать по 1. z ставится в начала в 0. Когда x достигнет 0, тогда z станет -х.

Добавлено: 18 ноя 2006, 23:55
Leo Gan
папа Карло писал(а):
Marmot писал(а):x=-x

без умножения
откомпилируется такое? :)
а почему не откомпилируется?

Добавлено: 18 ноя 2006, 23:58
Leo Gan
на бумаге есть такой метод:
возвести число в квадрат,
от результата взять квадратный корень,
выбрать отрицательный результат.

В коде не знаю, как это реализовать, т.к. Math.Sqrt возвращает только положит.число всегда.

Re: Вопросы с интервью....

Добавлено: 19 ноя 2006, 05:42
Russ
папа Карло писал(а):на днях интервьюировал очередного девелопера. На этот раз для соседней группы... задал тривиальную задачку.... в ней в одном месте позитивное число сделать негативным не используя -1 * х..... ответ потряс меня своей "крутизной" :)
int y = (x ^ 0xFFFFFFFF) + 1;

Добавлено: 19 ноя 2006, 09:56
ura
Leo Gan писал(а):
папа Карло писал(а):
Marmot писал(а):x=-x

без умножения
откомпилируется такое? :)
а почему не откомпилируется?
Точки с запятой нет? :)

Re: Вопросы с интервью....

Добавлено: 19 ноя 2006, 10:16
ura
Russ писал(а):
папа Карло писал(а):на днях интервьюировал очередного девелопера. На этот раз для соседней группы... задал тривиальную задачку.... в ней в одном месте позитивное число сделать негативным не используя -1 * х..... ответ потряс меня своей "крутизной" :)
int y = (x ^ 0xFFFFFFFF) + 1;
А если это была Java или managed code? Из контекста примера не понятно. А еще страшнее так ответить на C++ интервью :) замордуют с разрядностью. Хотя скорее всего битовые операции папа и ожидал, но от "сеньера" хотел бы услышать нечто более обобщенное. Посему не хватает пары тройки ifdef для проверки платформы. Так что может это и простой, но мерзкий вопрос. Если такой задают, то не нравитесь вы интервьюиру :D

Добавлено: 19 ноя 2006, 10:44
sz
Не замордуют. С разрядностью и так все ясно.
Если человек знает, что (x ^ 0xFFFFFFFF) + 1 дает -x, то глупо надеяться, что он посыпется на вопросах о разрядности.

Но вообще-то джавистам такие вопросы ни к чему. Программировать без if-ов и умножений может понадобиться только сишнику на грани ассемблера.

Да и то, оптимизатор иногда генерит лучше, чем эти изыски. Ну например известная функция (могут быть ошибки, я из головы пишу и без проверки):
inline int max( int a, int b )
{
int c = a - b;
int d = c >> 31;
return ( d & c ) + ( ~d & b );
}

не всегда сгенерит более быстрый код, чем (a>b?a:b). Например, на платформах, где есть ассемблерный селект (а таких все больше), оптимизатор запросто использует его и обгонит эти извращения с битами.

Я уже не говорю о том, что он и сам может эти извращения выдать. Причем он это сделает лучше. Потому что intrinsic всегда лучше inline.

Так что этой фигней имеет смысл заниматься только с действительно плохими компиляторами. Например, gcc под ps3 (тссс.. я ничего не говорил).

Добавлено: 19 ноя 2006, 10:51
Marmot
Старина Зотин писал(а):Например, gcc под ps3 (тссс.. я ничего не говорил).
Сказал, сказал, все слышали , выкладывайте сорцы гады!!! :twisted: :evil: :shock:

Re: Вопросы с интервью....

Добавлено: 19 ноя 2006, 10:53
папа Карло
ura писал(а):Хотя скорее всего битовые операции папа и ожидал
неее.... еще раз.... это всего лишь одно место в кода для более большого вопроса. все, что я ожидал это

Код: Выделить всё

if ( a < 0 ) a = 0 - a;
зачем что-то делать сложно? ведь этот код потом комуто саппортить надо :)

Добавлено: 19 ноя 2006, 11:00
Russ
зы: чтобы у интервьювера не возникали вопросы про разрядность, то можно написать так:

int y = ~x + 1;

просто первый вариант более нагляден для понимания сути, имхо

Re: Вопросы с интервью....

Добавлено: 19 ноя 2006, 11:04
Marmot
папа Карло писал(а): неее.... еще раз.... это всего лишь одно место в кода для более большого вопроса. все, что я ожидал это

Код: Выделить всё

if ( a < 0 ) a = 0 - a;
зачем что-то делать сложно? ведь этот код потом комуто саппортить надо :)
Ааа, всё понятно, Папа набирает исполнителей способных чётко и без вопросов следовать спекам, которые он(ну или кто другой) написал :)
Флаг в руки, как говорится...
Кстати, на меня иногда находят затмения, когда я путаю вторую и третью часть for-a, ну и что?
И код на доске я уже давно не могу писать, меня IDE с полной заточкой под шорткаты развратили... :)
Те же форы у меня генерятся автоматически для всех основных паттернов :)

Добавлено: 19 ноя 2006, 11:05
Marmot
Russ писал(а):зы: чтобы у интервьювера не возникали вопросы про разрядность, то можно написать так:

int y = ~x + 1;

просто первый вариант более нагляден для понимания сути, имхо
Ты не понял,нафиг, Папа хочет проверку на позитивность :)

Re: Вопросы с интервью....

Добавлено: 19 ноя 2006, 11:20
папа Карло
Marmot писал(а):Ааа, всё понятно, Папа набирает исполнителей способных чётко и без вопросов следовать спекам, которые он(ну или кто другой) написал :)
Флаг в руки, как говорится...
Кстати, на меня иногда находят затмения, когда я путаю вторую и третью часть for-a, ну и что?
И код на доске я уже давно не могу писать, меня IDE с полной заточкой под шорткаты развратили... :)
Те же форы у меня генерятся автоматически для всех основных паттернов :)
отучаемся думать за других... не стОит представлять за факт того, чего просто физически не знаешь. мне нужны люди способные самостоятельно работать... я не в ясли нанимаю чтоб бебиситить... есть разница между саппортом кода написанного в первом сообщении топика и одной простой строкой....

Добавлено: 19 ноя 2006, 11:25
папа Карло
Marmot писал(а):
Russ писал(а):зы: чтобы у интервьювера не возникали вопросы про разрядность, то можно написать так:

int y = ~x + 1;

просто первый вариант более нагляден для понимания сути, имхо
Ты не понял,нафиг, Папа хочет проверку на позитивность :)
опять не прав. чтоб написать код по моему вопросу там в одном месте надо сделать позитивное число отрицательным. хехе... миспринт допустил в своей строке... долно быть вот так.....

Код: Выделить всё

if ( flag == true ) [b]a = 0 - a;[/b] 
флаг должен быть в ИФе... но основной код толстый...

Re: Вопросы с интервью....

Добавлено: 19 ноя 2006, 14:25
nemiga
папа Карло писал(а):в ней в одном месте позитивное число сделать негативным не используя -1 * х.....
А я не понял, почему нельзя:
?

.