Java Interview Tasks
4.08K subscribers
195 photos
1 file
122 links
Реальные вопросы и задачи с собеседований.
Оригинальный авторский контент.
Актуальный материал.
Уровень вопросов от junior до supersenior.

Автор канала - @alexzelentsov

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
String str = "s=" + index + 1;
Что будет в переменной str, если index = 3?
Anonymous Quiz
1%
s=1
0%
s=2
4%
s=3
73%
s=31
19%
s=4
3%
Узнать ответ
👍11🐳2
Тут может возникнуть ощущение что будет s=4, но сложение идет перед конкатенацией, однозначно бы выглядел код:
String str = "s=" + (index + 1);
👍6🔥2🐳2
Что напечатает код?
👍11
Проблема, с которой мы сталкиваемся, связана с тем, как компилятор Java обрабатывает varargs внутри условных выражений, особенно когда ветви условия производят разные типы. Вот подробное объяснение и пошаговое решение:
когда мы используем условное выражение, компилятор не может обернуть только одну из ветвей. Он воспринимает условное выражение как целое. Поскольку тип ветви then — String, а тип ветви else — Object[], тип всего условного выражения является общим суперклассом для String и Object[], то есть просто Object. Это не массив, поэтому компилятор добавляет автоматическое оборачивание, что означает, что массив params будет обернут ещё раз.

Вы можете исправить это, если не будете полагаться на компилятор и обернете строку вручную: params.length == 0 ? new Object[]{"default"} : params. Однако, вероятно, будет менее запутанно вообще избегать условных выражений внутри вызова метода с varargs.
🔥9🐳41👍1
Что может напечатать метод print?
🔥6👍2
👍6🔥4🥰1
Ответ к вопросу про инкремент под гонкой:
Рассуждения аналогичные как и тут:
https://t.me/java_interview_tasks/96
Для примера, посмотрим, как может получится 2 - это самый интересный случай (см. картинку к посту)
Остальные варианты (больше 2) возможно получить аналогичными рассуждениями.

Выводы: этот простой пример показывает, что не синхронизированный счётчик может терять много данных.
Если вам нужно использовать счётчик под гонкой, то надо синхронизировать инкремент или использовать уже синхронизированные счётчики, например, AtomicInteger
👍7🔥5
Может ли метод print напечатать 0, 1 или 2?
Anonymous Quiz
8%
0 может
2%
1 может
22%
2 может
35%
все не могут
33%
узнать ответ
🔥4👍2
Логическая задача с собеседования:
Два друга, Андрей и Иван, решили приготовить пирог. Андрей внес вклад, добавив в тесто 300 грамм муки, а Иван добавил 200 грамм сахара. Когда пирог был испечен, к ним заглянул сосед и они пригласили его на чаепитие. Пирог разделили поровну на троих. После чаепития сосед оставил им 500 рублей в качестве благодарности.

Андрей предложил делить деньги так: 300 рублей ему, а 200 рублей Ивану. Однако Иван не согласился.
Как вы считаете, как они должны разделить вознаграждение, чтобы все было честно?
👍9
Как вы считаете, как они должны разделить вознаграждение, чтобы все было честно?
Anonymous Quiz
19%
предложено честно
58%
не честно
23%
узнать ответ
👍52🔥2
Что вернет метод?
👍4🔥4
🔥9🤡3👍2
👍4🔥3
Проблема в порядке операций, что может ввести в заблуждение - тернарный оператор имеет низкий приоритет
Пример кода, который однозначно будет пониматься:
👍8
Что делает метод trimAll?
🔥6👏2👍1
Здесь автор кода по ошибке попытался обрезать все строки внутри списка, но метод forEach позволяет использовать все элементы коллекции, но не позволяет их обновлять. Он принимает функциональный интерфейс Consumer, чей абстрактный метод accept() возвращает void, поэтому результат вызова trim() игнорируется. Было бы правильнее использовать метод replaceAll() в данном случае.
👍6🔥5
Что напечатает код?
🔥5👍2
🔥8👍2