Java Interview Tasks
Photo
Ответ к вопросу про хеш:
1) Если класс не immutable и метод расчета хеш-код зависит от полей объекта , то такой хеш код скорее всего не годится, так как после изменения полей объекта, хеш меняться не будет - это обычно приводит к проблемам
2) Если класс неизменяемый, то первой проблемы нет, зато есть concurrency баг - поле hash никак не синхронизировано, и внутри метода hashcode состояние этого поля меняется под гонкой => могут быть разные эффекты:
- пересчет hashcode может вызваться несколько раз, если поток увидит в поле hash 0
- в методе hashcode два чтения поля hash, может возникнуть ситуация когда эти два чтения будут разные, например даже так: первый раз прочитается поле и поток увидет не ноль , а второй раз в return увидит 0
Похожий код был в старых версиях jdk в классе String, вот подробности - https://bugs.openjdk.org/browse/JDK-8166842
1) Если класс не immutable и метод расчета хеш-код зависит от полей объекта , то такой хеш код скорее всего не годится, так как после изменения полей объекта, хеш меняться не будет - это обычно приводит к проблемам
2) Если класс неизменяемый, то первой проблемы нет, зато есть concurrency баг - поле hash никак не синхронизировано, и внутри метода hashcode состояние этого поля меняется под гонкой => могут быть разные эффекты:
- пересчет hashcode может вызваться несколько раз, если поток увидит в поле hash 0
- в методе hashcode два чтения поля hash, может возникнуть ситуация когда эти два чтения будут разные, например даже так: первый раз прочитается поле и поток увидет не ноль , а второй раз в return увидит 0
Похожий код был в старых версиях jdk в классе String, вот подробности - https://bugs.openjdk.org/browse/JDK-8166842
👍13🔥3🐳3❤🔥1❤1
Что напечатается в результате выполнения этого кода?
Anonymous Quiz
39%
0
17%
1
11%
2
17%
3
9%
4
5%
5
2%
10
👍13🤔7😁6🔥3🐳3
Задача для супер сеньоров, часть 2, что напечатается?
Anonymous Quiz
41%
0
14%
1
11%
2
18%
3
11%
4
5%
5
🔥14👏1
Задача для супер сеньоров, часть 3, что напечатается?
Anonymous Quiz
22%
0
6%
1
7%
2
8%
3
21%
4
23%
5
13%
"null"
👍10🔥7🫡7
🔥10😱3👍2👏1
Что напечатается в результате выполнения кода?
Anonymous Quiz
26%
ничего
32%
test
29%
будет эксепшен
13%
узнать ответ
🔥9👏1
🔥8🆒4👍3👎3🐳1
Ответ на вопрос про различные блокировки:
Частый вопрос на собеседовании про несколько вызовов lock у ReentrantLock и
acquire у Semaphore внутри одного треда
Как видно из задач выше, в случае ReentrantLock проблем не возникнет, и
второй lock не заблокирует тот же самый поток.
Semaphore, наоборот, заблокирует на втором вызове.
syncronized работает так же, как и ReentrantLock - не заблокирует при втором вызове.
Частый вопрос на собеседовании про несколько вызовов lock у ReentrantLock и
acquire у Semaphore внутри одного треда
Как видно из задач выше, в случае ReentrantLock проблем не возникнет, и
второй lock не заблокирует тот же самый поток.
Semaphore, наоборот, заблокирует на втором вызове.
syncronized работает так же, как и ReentrantLock - не заблокирует при втором вызове.
👍7🔥4
Выводы после вопросов про разные варианты map и операции с null (https://t.me/java_interview_tasks/209):
Надо работать аккуратно, когда вы не знаете реализацию map (например, map приходит в метод как параметр), возможно вам нужно добавлять
проверки на null перед операциями с map, либо если вы модифицируете map, надо убедиться что map mutable (как вариант создать new HashMap и сложить туда все элементы из мапы которая пришла в метод, а потом уже модифицировать новую мапу)
Надо работать аккуратно, когда вы не знаете реализацию map (например, map приходит в метод как параметр), возможно вам нужно добавлять
проверки на null перед операциями с map, либо если вы модифицируете map, надо убедиться что map mutable (как вариант создать new HashMap и сложить туда все элементы из мапы которая пришла в метод, а потом уже модифицировать новую мапу)
Telegram
Java Interview Tasks
Задача для супер сеньоров: что напечатается в результате выполнения этого кода?
👍6🔥3👏1
Упражнение для читателей - пофиксить все баги в этом коде, при учете того что в метод могут прийти любые параметры
👍7🐳3👏1
Решение последней задачи (https://t.me/java_interview_tasks/225)
от GPT бота:
https://t.me/ChatGPT_BotGroup/44
от GPT бота:
https://t.me/ChatGPT_BotGroup/44
Telegram
Java Interview Tasks
Пример такого небезопасного кода:
😁8🔥2