fa
Feedback
Java Interview Tasks

Java Interview Tasks

رفتن به کانال در Telegram

Реальные вопросы и задачи с собеседований. Оригинальный авторский контент. Актуальный материал. Уровень вопросов от junior до supersenior. Автор канала - @alexzelentsov По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks

نمایش بیشتر
4 521
مشترکین
-324 ساعت
-97 روز
-2730 روز
آرشیو پست ها
Правильно ли работает метод?
Правильно ли работает метод?

Проблемы метода isOdd: Метод будет правильно работать для положительных нечетных чисел, но он не будет правильно обрабатывать отрицательные нечетные числа. В частности, для отрицательных нечетных чисел, остаток от деления на 2 будет -1, что не соответствует условию. Например: Для value = -3, возвращаемое значение будет равно: -3 % 2 == -1 // это не то, что мы ожидаем, метод вернет false Чтобы метод корректно определял нечетность для всех целых чисел (как положительных, так и отрицательных), вы можете использовать такую реализацию: public boolean isOdd(int value) { return value % 2 != 0; }

Правильно ли реализован метод?
Anonymous voting

Правильно ли реализован метод?
Правильно ли реализован метод?

Ответ на вопрос про количество примитивных типов в java: В Java существует восемь примитивных типов данных: byte - 8-битное целое число. short - 16-битное целое число. int - 32-битное целое число. long - 64-битное целое число. float - 32-битное число с плавающей точкой. double - 64-битное число с плавающей точкой. char - 16-битный символ (представляет символ в кодировке UTF-16). boolean - логический тип (может принимать значения true или false).

Сколько есть примитивных типов в джаве?
Anonymous voting

Ответ на вопрос про Math.abs: Когда вы вызываете Math.abs(Integer.MIN_VALUE) в Java, результатом будет Integer.MIN_VALUE, и вы получите отрицательное значение. Давайте разберемся, почему так происходит. Метод Math.abs() возвращает абсолютное значение числа. То есть он возвращает положительное значение, если число отрицательное, и само число, если оно положительное. Integer.MIN_VALUE представляет собой наименьшее возможное значение для типа int в Java, которое равно -2,147,483,648 (или −(2^31)). Когда вы вызываете Math.abs(-2,147,483,648), метод пытается вернуть положительное значение этого числа. Однако в диапазоне int не существует представления для 2,147,483,648, так как максимальное положительное значение int — это 2,147,483,647 (или 2^31 - 1). Следовательно, попытка преобразовать Integer.MIN_VALUE в положительное значение приводит к переполнению. По сути, когда Math.abs() пытается вернуть -(-2,147,483,648), это значение не может быть представлено в типе int, и в результате вы получите Integer.MIN_VALUE, а не ожидаемое положительное число. Как вариант решения можно использовать Math.absExact, он в этом случае кидает ArithmeticError. Так же обратите внимание на метод Math.floorMod как замену для Math.abs() % intVal

Может ли Math.abs() вернуть отрицательный результат?
Anonymous voting

Есть ли проблемы в этом коде?
Есть ли проблемы в этом коде?

Ответ на вопрос про Integer.MIN_VALUE/-Integer.MIN_VALUE: Выражение System.out.println(Integer.MIN_VALUE == -Integer.MIN_VALUE); выводит true. Давайте поймем почему так: Integer.MIN_VALUE — это константа в Java, представляющая наименьшее возможное значение для типа int. Для 32-битного целочисленного типа это значение равно -2,147,483,648 (или −(2^31)). Когда мы берем отрицательное значение от Integer.MIN_VALUE, мы вычисляем: -Integer.MIN_VALUE = -(-2,147,483,648) = 2,147,483,648 Однако 2,147,483,648 не может быть представлено в типе int, так как максимальное значение для int — это 2,147,483,647 (или 2^31 - 1). Поэтому при попытке установить такое значение происходит переполнение. При преобразовании 2,147,483,648 в тип int происходит переполнение. Оно «оборачивается» назад по кругу и становится равным Integer.MIN_VALUE, то есть -2,147,483,648.

Что напечатает код?
Anonymous voting

Что напечатает код?
Что напечатает код?

Разъяснение вопроса про get/set name: В коде метод main создает экземпляр класса B, устанавливает значение имени с помощью метода setName, а затем выводит значение имени с помощью метода getName. Однако выводится null, и это может быть непонятным на первый взгляд. Давайте разберемся в чем дело. Класс A содержит поле name, которое является закрытым (private) и имеет геттер getName, который возвращает значение этого поля. Класс B наследуется от класса A, но в нем есть собственное закрытое поле name и метод setName, который устанавливает значение этого поля. Когда вы вызываете b.setName("name");, вы устанавливаете значение локального поля name в классе B, а не в классе A. Поэтому поле name в классе A по-прежнему остается null. Когда вызывается System.out.println(b.getName());, этот метод берёт значение поля name из класса A, которое не было изменено, и таким образом возвращает null.

Что напечатает код?
Anonymous voting

Что напечатает код?
Что напечатает код?

Ответ на вопрос про перевод секунд в микросекунды: Правильный ответ тут будет 705032704 из-за переполнения int. При умножении двух целочисленных значений Java выполняет умножение с использованием типа int. Если результат этого умножения превышает максимальное значение, которое может храниться в int (которое составляет 2,147,483,647), происходит переполнение, что приводит к неправильному поведению. Чтобы избежать этой проблемы при работе с большими числами, можно убедиться, что умножение выполняется с использованием типа long, добавив суффикс L к числу, на которое вы умножаете (в данном случае 1_000_000L). Это повысит уровень операции умножения до long, который имеет гораздо большее максимальное значение (до 9,223,372,036,854,775,807). Вот исправленная строка кода: long microseconds = seconds * 1_000_000L;

Что напечатает код?
Anonymous voting

Что напечатает код?
Что напечатает код?

Ответ на вопрос про перемножение iSet и jSet: Элементов 8, так как 0 .0 и -0.0 считаются уникальными значениями В стандартном IEEE 754, который используется для представления чисел с плавающей точкой, существуют два разных значения для нуля: 0.0 (положительный ноль) -0.0 (отрицательный ноль) В Java, хотя 0.0 и -0.0 эквивалентны при использовании оператора ==, они могут рассматриваться как отдельные значения: HashSet использует hashCode() для определения уникальности объектов, и метод hashCode() для Double возвращает разные хэш-коды для 0.0 и -0.0. Из-за этого оба значения могут храниться в HashSet. Таким образом, result будет содержать: 0.0 (положительный ноль) -0.0 (отрицательный ноль) 0.25 -0.25 0.5 -0.5 1.0 -1.0 Поэтому result.size() возвращает 8, поскольку 0.0 и -0.0 считаются разными значениями в HashSet из-за нюансов представления чисел с плавающей точкой в Java (см. IEEE 754).

Сколько элементов будет в result?
Anonymous voting