powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / А вы говорите, зачем тонкости на собеседовании спрашивать...
25 сообщений из 41, страница 1 из 2
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #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
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #39705573
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне первый вариант видится корректным. А в чем подвох?
...
Рейтинг: 0 / 0
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #39705575
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
abs(Integer.MIN_VALUE)=Integer.MIN_VALUE, например, но как hash может быть оказаться таким ?
...
Рейтинг: 0 / 0
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #39705577
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне вообще оба варианта видятся одинаковыми

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

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

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

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



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

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

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

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

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

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

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

Нет, конечно, не буду спрашивать. Но и "нафиг не надо" тоже не получится сказать :)
...
Рейтинг: 0 / 0
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #39705619
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominНо и "нафиг не надо" тоже не получится сказать :)
согласен, инфа занятная. и главное причина ясна, но чёрт меня подери, что за чудесная закладка
...
Рейтинг: 0 / 0
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #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
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #39705674
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

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

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

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

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

через или бит можно установить. сбросить через и )))
каюсь, задумался пока писал. Про то, что кажется я даже помню как в свое время с удивлением про эти MAX_MIN_VALUE и проблемы с ними читал на заре знакомства с 1-й java. Я тогда еще подумал -"зачем я это читаю?" И с тех пор туда не заглядывал. А оно вон как оборачивается - завалят меня на этом вопросе.
...
Рейтинг: 0 / 0
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #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
А вы говорите, зачем тонкости на собеседовании спрашивать...
    #39706328
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, abs не является локальной проблемой Явы, это есть и в других языках.

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

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

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

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

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

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

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

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

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

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


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