Java Interview Tasks
Відкрити в Telegram
Реальные вопросы и задачи с собеседований. Оригинальный авторский контент. Актуальный материал. Уровень вопросов от junior до supersenior. Автор канала - @alexzelentsov По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Показати більше4 521
Підписники
Немає даних24 години
-107 днів
-2730 день
Архів дописів
4 522
Задача для супер сеньоров: что напечатается в результате выполнения этого кода?
4 522
Ответ к вопросу про хеш:
1) Если класс не immutable и метод расчета хеш-код зависит от полей объекта , то такой хеш код скорее всего не годится, так как после изменения полей объекта, хеш меняться не будет - это обычно приводит к проблемам
2) Если класс неизменяемый, то первой проблемы нет, зато есть concurrency баг - поле hash никак не синхронизировано, и внутри метода hashcode состояние этого поля меняется под гонкой => могут быть разные эффекты:
- пересчет hashcode может вызваться несколько раз, если поток увидит в поле hash 0
- в методе hashcode два чтения поля hash, может возникнуть ситуация когда эти два чтения будут разные, например даже так: первый раз прочитается поле и поток увидет не ноль , а второй раз в return увидит 0
Похожий код был в старых версиях jdk в классе String, вот подробности - https://bugs.openjdk.org/browse/JDK-8166842
4 522
Repost from Java Developer
Ответ: "test"
Способ вычисления хэша map, set, list - это часть контракта соответствующих интерфейсов. Каждая реализация должна использовать формулу, указанную в контракте. Поэтому поведение будет общим для всех JDK.
Посмотрим теперь, какой же контракт и конкретные формулы для подсчета хеша у мапы.
"The hash code of a map is defined to be the sum of the hash codes of each entry in the map's entrySet() view."
Посмотрим, как вычисляется хешкод у Map.Entry:
"The hash code of a map entry e is defined to be:
(e.getKey()==null ? 0 : e.getKey().hashCode()) ^
(e.getValue()==null ? 0 : e.getValue().hashCode())"
Зная это, мы можем посчитать хешкод нашей мапы: он будет равен 0. Почему? Так как у единственной Map.Entry совпадают значения ключа и значения, то их хешкоды будут совпадать, а значит хешкод Map.Entry будет равен 0 (XOR двух одинаковых чисел дает всегда 0).
После добавления второго Map.Entry хешкод останется равным 0, так как там тоже совпадают значения ключа и значения. Повезло, повезло.
В итоге при вызове метод get будет искать Map.Entry в нужном бакете и, встретив нужную ноду, вызовет equals, который вернет true, так как при вставке значение ключа не копируется, и он будет отображать все изменения, которые с ним происходили.
Естественно, изменять ключ после вставки в HashMap крайне не рекомендуется, иначе потом можно его не найти. Но в данном конкретном случае нам повезло, что хешкод не изменился.
4 522
Привет, это команда Тинькофф 💡
Наше большое Java-комьюнити решает крутые задачи — создает высоконагруженные сервисы для 27 миллионов клиентов. Мы экспериментируем и ищем новые решения. Приглашаем в команду Java-разработчиков с опытом от трех лет!
Работать с нами значит:
— не ограничивать свои скиллы и вводить в сервисы новые фичи;
— делать жизнь миллионов людей удобнее и технологичней;
— расти в грейде по скиллам, а не по стажу в компании;
— становиться заметным в Java-комьюнити.
А еще мы всегда «за» действительно комфортную работу. Поэтому большинство бытовых забот делегируем компании: от расширенного ДМС и юридической помощи до питания и разных активностей.
Откликнуться и узнать подробнее о Java-команде Тинькофф: https://o.tinkoff.ru/kotlin.java
4 522
Проблема тут в том, что параллельный стрим запускается в commonThreadPool , этот тред пул один - он предназначен для неблокирующих операций, а в данном примере кода в нем будут запускаться сетевые запросы.
Это может привести к тому, что пока данный стрим будет работать и блокироваться на сетевых вызовах, остальные параллельные стримы и CompletableFuture's в системе будут висеть в очереди.
Статьи на эту тему:
https://dzone.com/articles/be-aware-of-forkjoinpoolcommonpool
https://www.baeldung.com/java-8-parallel-streams-custom-threadpool
4 522
Ответ к задаче про atomic (https://t.me/java_interview_tasks/195):
Проблема в том, что внутри класса AtomicInteger поле value не final, а volatile поле не имеет final семантики, поэтому если мы публикуем ссылку объекта пол гонкой, то можно увидеть дефолтное значение поля (0 в данном случае)
Похожая задача была тут - https://t.me/java_interview_tasks/140
0 можно получить на AArch64:
RESULT SAMPLES FREQ
-1 1,358,737,999 90.09%
0 8,322 <0.01%
42 149,426,735 9.91%
4 522
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
4 522
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
4 522
Начни карьеру разработчика с Java ✈️
Вечером, 10 ноября в 19:00 (мск), обсудим, с чего лучше начать карьеру в Java, какие возможности есть у разработчиков на сегодняшний день и какой уровень зарплат стоит ожидать специалистам.
Заметно повысились требования работодателей к Junior и Middle-специалистам, поэтому важно понимать, какими навыками следует обладать современным разработчикам и каких ошибок избегать, чтобы успешно конкурировать в мире IT.
Также на вебинаре мы презентуем курс «Backend Java Developer», который стартует в ноябре.
Во время онлайн-вебинара вы сможете задавать вопросы. Все участники получат специальный бонус - Чек-лист «Как вырасти с Джуна до уровня Сеньор в backend разработке».
Ждем тебя на бесплатном вебинаре 10 ноября! Только онлайн, никакой записи))) Регистрируйся, до встречи!
4 522
Здесь проблема в том, что сумма будет ровна 1,0..01е199 , где в мантиссе числа 199 нулей и поэтому это число нельзя представить точно в виде double (там на мантиссу выделяется 53 бита), поэтому будет округление
Еще вопросы про double:
https://t.me/java_interview_tasks/85
https://t.me/java_interview_tasks/150
4 522
Что будет напечатано?
List list = List.of(null, "1", "2"); String result = list.stream().findFirst().orElse(""); System.out.println(result);
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
