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

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

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
Проблемы метода isOdd:
Метод будет правильно работать для положительных нечетных чисел, но он не будет правильно обрабатывать отрицательные нечетные числа. В частности, для отрицательных нечетных чисел, остаток от деления на 2 будет -1, что не соответствует условию. Например:
Для value = -3, возвращаемое значение будет равно:
-3 % 2 == -1 // это не то, что мы ожидаем, метод вернет false

Чтобы метод корректно определял нечетность для всех целых чисел (как положительных, так и отрицательных), вы можете использовать такую реализацию:

public boolean isOdd(int value) {
return value % 2 != 0;
}
👍10🐳3🔥2
Правильно ли работает метод?
🔥6👍3👎1🙏1
Правильно ли работает метод to0_100Range() ?
Anonymous Quiz
23%
да
67%
нет
3%
другой ответ
8%
узнать ответ
👍6🔥1🙏1
Пояснение к to0_100Range():
Тут неправильное использование Math.min и Math.max: используется Math.max(value, 100), чтобы ограничить значение, но при этом вызывается Math.min(0, ...).
Это означает, что если value не меньше 100, то после выполнения этой операции value будет всегда 0, так как Math.min(0, ...) вернет 0 независимо от второго аргумента, если он больше 0.
Ожидаемое поведение - предполагается, что надо ограничить value в диапазоне от 0 до 100, включая крайние значения. Однако текущий код этого не делает. На самом деле, после выполнения этой строки:

Если value меньше 100, но больше 0, то ваше значение будет 0.
Если value больше 100, то оно останется 0 из-за Math.min.
Корректное решение:
Для ограничения значения value в диапазоне от 0 до 100, вы можете воспользоваться следующим кодом:
value = Math.max(0, Math.min(value, 100));
👍64🔥3
Что напечатает код?
🔥4👍3🙏1
👍4🔥4😁4
Ответ на вопрос про -1 * 0.0 :
Когда вы выполняете выражение -1 * 0.0 в Java, результат будет -0.0. Давайте разберем, почему это происходит.

В математике любое число, умноженное на 0, всегда дает 0. Однако в языке программирования, таком как Java, 0 может быть представлен как 0.0 (положительный ноль с плавающей точкой) и -0.0 (отрицательный ноль с плавающей точкой). Обратите внимание, что это не просто разные представления одного и того же числа — они могут повлиять на поведение программ, которые используют их.

В данном случае 0.0 — это значение с плавающей точкой, и операция умножения с -1 (который является целым числом) автоматически приводит -1 к типу double для выполнения операции. Таким образом, -1 * 0.0 выполняется как -1.0 * 0.0.

Когда вы умножаете -1.0 * 0.0, результатом будет -0.0. В Java, значение -0.0 действительно существует и может быть использовано, например, в сравнениях или в других математических операциях.
🔥7👍5😁1🙏1
У вас есть 3 монеты:
Первая монета имеет 2 орла (О, О).
Вторая монета имеет 2 решки (Р, Р).
Третья монета имеет 1 орел и 1 решка (О, Р).
Вы случайным образом выбираете одну монету и подбрасываете ее.
Какова вероятность того, что выпал орел?
👍72🔥1
Решение задачи про три монеты:
Определяем вероятности выбора монет:

У вас есть 3 монеты, и каждая монета имеет равные шансы быть выбранной. Это значит, что вероятность выбора каждой монеты равна 1/3.
Рассмотрим возможные исходы при выборе каждой монеты:

Первая монета (О, О): При подбрасывании этой монеты, вы всегда получите орел, поскольку у монеты оба lados — орлы.
Вторая монета (Р, Р): При подбрасывании этой монеты, вы никогда не получите орел, так как у нее только решки.
Третья монета (О, Р): При подбрасывании этой монеты, вы получите орел с вероятностью 50%, так как у нее один орел и одна решка.
Считаем шансы получить орел:

Теперь оценим, сколько случаев из возможных приведут к получению орла:
Из 3-х монет:
1-я монета всегда дает орел (1 случай).
2-я монета никогда не дает орел (0 случаев).
3-я монета дает орел в половине случаев (1 случай из 2, то есть 0.5).
Объединяем результаты:

У нас есть:
1 случай из 1 (первая монета).
0 случаев из 1 (вторая монета).
0.5 случаев из 1 (третья монета).
Тогда общее количество случаев, когда мы получаем орел:
( 1 + 0 + 0.5 = 1.5 )
Общее количество подбрасываний:

Поскольку мы выбираем одну из трех монет, фактически общее количество попыток — это 1 (от первой монеты) + 1 (от второй) + 0.5 (от третьей).
Таким образом, общее количество подбрасываний — 3 (так как мы рассматриваем сжатый вариант из природы случайной выборки).
Находим вероятность:

Таким образом, общая вероятность получения орла: [ P(орел) = 1.5/3 = 1/2 ]
Ответ:
Вероятность того, что выпал орел, составляет ( 1/2 ) или 50%.
👍10🔥42👎1
Чему равно значение переменной allMatch?
👍5🔥2🙏1
Чему равно значение переменной allMatch?
Anonymous Quiz
27%
true
63%
false
10%
узнать ответ
😭8👍3🔥2
Чему равно значение переменной anyMatch?
👍5🔥1🙏1
Чему равно значение переменной anyMatch?
Anonymous Quiz
24%
true
70%
false
6%
узнать ответ
👍71🔥1
Значение переменной allMatch равно true. Значение переменной anyMatch будет false

По спецификации Java Streams, allMatch возвращает true, если стрим не содержит элементов. Это связано с тем, что условие "все элементы удовлетворяют предикату" считается выполненным, если нет элементов, которые могли бы его не удовлетворить.
Результат выполнения:
Следовательно, значение переменной allMatch будет true.

Метод anyMatch проверяет, удовлетворяет ли хотя бы один элемент стрима заданному условию (в данном случае предикату, проверяющему, содержит ли строка символ "a").

По спецификации Java Streams, метод anyMatch возвращает false, если стрим не содержит элементов. Это связано с тем, что условие "хотя бы один элемент удовлетворяет предикату" не может быть выполнено в пустом потоке.

Следовательно, значение переменной anyMatch будет false.
👍18🔥4🙏1
👍4😢4🔥2
🔥5👍3👏3
Чему равны переменные a и b?

Для d.equals(-0.0): false
Объяснение: Метод equals() для объектов типа Double сравнивает их значения, но в этом случае сравнение 0.0 и -0.0 возвращает false, поскольку equals() также учитывает знак.

Для d == -0.0: true
Объяснение: Оператор == сравнивает значения, и в Java 0.0 и -0.0 считаются равными несмотря на различные знаки, поэтому выражение возвращает true.

Таким образом, результаты выполнения данного кода:

d.equals(-0.0) вернет false
d == -0.0 вернет true

Давайте разберем, почему так сделано в Java.
Оператор == при сравнении примитивных типов (включая double) сравнивает их численные значения, игнорируя знак. Таким образом, 0.0 и -0.0 считаются равными, поскольку в контексте числовых вычислений они представляют одно и то же количество: нулевая величина.

Java использует стандарт IEEE 754 для представления чисел с плавающей точкой, в котором существуют два разных значения для нуля: +0.0 и -0.0. Однако, когда речь идет о сравнении значений, стандарт допускает равенство этих двух значений.

Метод equals() является методом класса Object и может быть переопределён. В случае класса Double, метод equals() не только сравнивает значения, но и учитывает знак числа.

Метод equals() в Double реализован так, что он воспринимает 0.0 и -0.0 как разные значения. Это сделано для поддержки точного различения, которое может быть важно в некоторых математических или инженерных расчётах. Например, в контексте некоторых алгоритмов или в области численной линейной алгебры знак может играть важную роль.
👍10🔥2👌2🙏1🕊1
Что напечатает код?
👍7🥰1🙏1
🐳5👍42🔥1
Ответ на вопрос про Multimap.forEach:
Правильный ответ 3, проще всего понять причину, если в forEach добавить типы параметров:
map.forEach((Integer key, String values) -> i.getAndIncrement());
Тогда видно, что "String values" это одно "value", а не "values", еще больше запутывает название параметра "values"
Для примера результат работы кода выше будет такой:
1=one
1=two
1=three
👍7🔥3🙏1
Что напечатает код?
👍5🔥1🙏1