Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / А вы говорите, зачем тонкости на собеседовании спрашивать... / 25 сообщений из 41, страница 1 из 2
20.09.2018, 12:12
    #39705549
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Добрый день!

Вот пулл-реквест в рабочий код:
Fix ArrayIndexOutOfBoundsException
Было:
Код: sql
1.
2.
int hash = ...;
values[Math.abs(hash) % values.length] = ...



Стало:
Код: sql
1.
2.
int hash = ...;
values[Math.abs(hash % values.length)] = ...



Вот вроде нафиг не надо знать эту странную багофичу abs, а вот выстрелила...
...
Рейтинг: 0 / 0
20.09.2018, 12:47
    #39705573
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Мне первый вариант видится корректным. А в чем подвох?
...
Рейтинг: 0 / 0
20.09.2018, 12:50
    #39705575
cossack5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey Tomin,
abs(Integer.MIN_VALUE)=Integer.MIN_VALUE, например, но как hash может быть оказаться таким ?
...
Рейтинг: 0 / 0
20.09.2018, 12:52
    #39705577
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
А мне вообще оба варианта видятся одинаковыми

Подвоха так же не понял ((( вроде везде int, во float (ошибки округления) скатиться не должны (((
...
Рейтинг: 0 / 0
20.09.2018, 12:55
    #39705579
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid KudryavtsevА мне вообще оба варианта видятся одинаковыми

Подвоха так же не понял ((( вроде везде int, во float (ошибки округления) скатиться не должны (((

Оказывается, если почитать документацию, то можно найти вот такой прикол:

Код: java
1.
        System.out.println(Math.abs(Integer.MIN_VALUE));



Код: plaintext
-2147483648
...
Рейтинг: 0 / 0
20.09.2018, 12:56
    #39705580
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Типа нужно было не выпендриваться, а просто к unsigned int скастовать?

вот нафига hash делать знаковым (((
...
Рейтинг: 0 / 0
20.09.2018, 12:57
    #39705584
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid KudryavtsevТипа нужно было не выпендриваться, а просто к unsigned int скастовать?

вот нафига hash делать знаковым (((

А в яве есть беззнаковые ?
...
Рейтинг: 0 / 0
20.09.2018, 13:03
    #39705585
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Да ладно, если values степень двойки, можно было бы по & обрезать.

Горе от ума. Не пытались бы написать универсально, не нарвались бы на Math.abs. Который, в принципе, в данном случае не сильно и нужен. Бинарное & в любом случае быстрее, чем деление по модулю.

p.s. Вот 99% уверен, что values.length == степень двойки )))
...
Рейтинг: 0 / 0
20.09.2018, 13:17
    #39705590
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid KudryavtsevВот 99% уверен, что values.length == степень двойки )))

Быстрый поиск показал, что одно из значений - "40"
...
Рейтинг: 0 / 0
20.09.2018, 13:37
    #39705606
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
гмм...ну если на собеседовании спрашивать такие тонкости, то мне жаль того, кто будет искать новых работников ;)
...
Рейтинг: 0 / 0
20.09.2018, 13:49
    #39705611
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
chpashaгмм...ну если на собеседовании спрашивать такие тонкости, то мне жаль того, кто будет искать новых работников ;)

Нет, конечно, не буду спрашивать. Но и "нафиг не надо" тоже не получится сказать :)
...
Рейтинг: 0 / 0
20.09.2018, 13:58
    #39705619
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey TominНо и "нафиг не надо" тоже не получится сказать :)
согласен, инфа занятная. и главное причина ясна, но чёрт меня подери, что за чудесная закладка
...
Рейтинг: 0 / 0
20.09.2018, 14:19
    #39705633
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey Tomin
Стало:
Код: sql
1.
2.
int hash = ...;
values[Math.abs(hash % values.length)] = ...




А нужно было сделать предварительно кошерную конвертацию :)

Примерно так - пусть знатоки поправят синтаксис, если необходимо:
Код: java
1.
2.
int hash = ...;
values[Math.abs((long)hash) % (long)values.length] = ...
...
Рейтинг: 0 / 0
20.09.2018, 15:17
    #39705674
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey Tomin,

то что Math.abs() в случае Integer.MIN_VALUE возвращает хрень это еще полбеды. А вот то что деление с остатком в жаве не как в математике (там остаток по определению неотрицательный) - вот это ад.
...
Рейтинг: 0 / 0
20.09.2018, 17:47
    #39705769
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid KudryavtsevТипа нужно было не выпендриваться, а просто к unsigned int скастовать?

вот нафига hash делать знаковым (((
Тогда проще через бинарное ИЛИ сбросить старший бит, а потом уже делить или что-то еще.
...
Рейтинг: 0 / 0
20.09.2018, 17:51
    #39705772
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
ПылинкаТогда проще через бинарное ИЛИ сбросить старший бит, а потом уже делить или что-то еще.
+1
только через И

через или бит можно установить. сбросить через и )))
...
Рейтинг: 0 / 0
20.09.2018, 17:59
    #39705777
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid Kudryavtsevчерез или бит можно установить. сбросить через и )))Или троица "и-или-не" или пара "и-исключающее или" ("или-исключающее или").
"Исторически сложилось, что используется пара "and-xor".
...
Рейтинг: 0 / 0
20.09.2018, 23:37
    #39705902
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid Kudryavtsev+1
только через И

через или бит можно установить. сбросить через и )))
...
Рейтинг: 0 / 0
21.09.2018, 00:15
    #39705908
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Leonid Kudryavtsev+1
только через И

через или бит можно установить. сбросить через и )))
каюсь, задумался пока писал. Про то, что кажется я даже помню как в свое время с удивлением про эти MAX_MIN_VALUE и проблемы с ними читал на заре знакомства с 1-й java. Я тогда еще подумал -"зачем я это читаю?" И с тех пор туда не заглядывал. А оно вон как оборачивается - завалят меня на этом вопросе.
...
Рейтинг: 0 / 0
21.09.2018, 12:23
    #39706056
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey TominДобрый день!

Вот пулл-реквест в рабочий код:
Fix ArrayIndexOutOfBoundsException
Было:
Код: sql
1.
2.
int hash = ...;
values[Math.abs(hash) % values.length] = ...



Стало:
Код: sql
1.
2.
int hash = ...;
values[Math.abs(hash % values.length)] = ...



Вот вроде нафиг не надо знать эту странную багофичу abs, а вот выстрелила...

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

в целом лично я такую порнуху ни в первом ни во втором случае в принципе делать не стал.
может вы еще стринги в стрингпул кладете интерном а потом иквалз иквалзом сравниваете?
...
Рейтинг: 0 / 0
21.09.2018, 23:17
    #39706328
Eugene New
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Увы, abs не является локальной проблемой Явы, это есть и в других языках.

Что до собеседования, то я бы спрашивал первым делом диплом о высшем образовании, как минимум высшем техническом, обязательно очном, это сразу решало бы 90% процентов возможных проблем с кандидатом.
...
Рейтинг: 0 / 0
24.09.2018, 08:01
    #39706756
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Eugene NewУвы, abs не является локальной проблемой Явы, это есть и в других языках.

Скорее всего это процессор нагадил.
...
Рейтинг: 0 / 0
24.09.2018, 14:05
    #39707005
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey TominEugene NewУвы, abs не является локальной проблемой Явы, это есть и в других языках.
Скорее всего это процессор нагадил.

при чем тут процессор?
это бинарная арифметика нагадила
Все притензии толи к Джордж Булю. толи к Лейбницу )))

– Взять бы этого Канта, да за такие доказательства года на три в Соловки! – совершенно неожиданно бухнул Иван Николаевич.
...
Но предложение отправить Канта в Соловки не только не поразило иностранца, но даже привело в восторг.

– Именно, именно, – закричал он, и левый зеленый глаз его, обращенный к Берлиозу, засверкал, – ему там самое место!
....
– Но, – продолжал иноземец, не смущаясь изумлением Берлиоза и обращаясь к поэту, – отправить его в Соловки невозможно по той причине, что он уже с лишком сто лет пребывает в местах значительно более отдаленных, чем Соловки, и извлечь его оттуда никоим образом нельзя, уверяю вас!

– А жаль! – отозвался задира-поэт.

– И мне жаль! – подтвердил неизвестный, сверкая глазом
...
Рейтинг: 0 / 0
24.09.2018, 14:20
    #39707030
Eugene New
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey Tomin,

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

я бы добавил проверку и генерировал бы либо ошибку времени выполнения, либо NaN. По крайней мере функцию не следовало называть abs.
...
Рейтинг: 0 / 0
24.09.2018, 14:30
    #39707046
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А вы говорите, зачем тонкости на собеседовании спрашивать...
Alexey Tomin,

Это ж как должно повезти, чтобы на практике встретился хэш 0x80000000? Неужели таки "выстрелило"?..
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / А вы говорите, зачем тонкости на собеседовании спрашивать... / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]