Java Interview Tasks
Kanalga Telegram’da o‘tish
Реальные вопросы и задачи с собеседований. Оригинальный авторский контент. Актуальный материал. Уровень вопросов от junior до supersenior. Автор канала - @alexzelentsov По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Ko'proq ko'rsatish4 521
Obunachilar
Ma'lumot yo'q24 soatlar
-107 kunlar
-2730 kunlar
Postlar arxiv
4 521
Ответ на задачу про вычисление среднего: При использовании выражения LongStream.of(Long.MAX_VALUE, Long.MAX_VALUE) внутренняя работа функции average() сначала вычисляет сумму элементов. Поскольку оба значения равны Long.MAX_VALUE, сумма превышает Long.MAX_VALUE: [ Long.MAX_VALUE + Long.MAX_VALUE = 2 \times (2^{63} - 1) = 2^{64} - 2 ] Однако 2^{64} - 2 не может быть представлено типом long (она превышает Long.MAX_VALUE), в результате чего происходит переполнение.
Поскольку sum фактически переполняется и становится отрицательным (из-за переполнения), результатом вычисления среднего может стать отрицательное значение, что является контринтуитивным.
4 521
Решение задачи про удаленную работу:
Процент сотрудников на удаленке: 20% (то есть из 100 сотрудников 20 работают на удаленке и 80 — в офисе).
Вероятность, что удаленный сотрудник работает меньше 8 часов: 50% (из 20 удаленных сотрудников, 10 работают меньше 8 часов).
Вероятность, что офисный сотрудник работает меньше 8 часов: 10% (из 80 офисных сотрудников, 8 работают меньше 8 часов).
Считаем общее количество сотрудников, которые работают меньше 8 часов.
Удаленные сотрудники: 10 (из 20).
Офисные сотрудники: 8 (из 80).
Итого сотрудников, работающих меньше 8 часов: [ 10 + 8 = 18 ]
Выясняем, сколько из работающих меньше 8 часов — это удаленные сотрудники.
У нас 10 удаленных сотрудников, которые работают меньше 8 часов.
Теперь находим долю удаленных сотрудников среди всех, кто работает меньше 8 часов.
Из 18 сотрудников, работающих меньше 8 часов, 10 являются удаленными.
Вероятность того, что сотрудник работает на удаленке, если он работает меньше 8 часов:
Это 10 удаленных сотрудников из 18 работающих меньше 8 часов: [ 10/18 = 0.56 ]
Ответ:
Таким образом, вероятность того, что сотрудник работает на удаленке, если он работает меньше 8 часов в день, составляет примерно 56%
4 521
В компании 20% сотрудников работают на удаленке. Если сотрудник работает на удаленке, то вероятность того, что он работает каждый день меньше 8 часов, составляет 50%. Если сотрудник работает в офисе, то вероятность того, что он работает меньше , составляет 10%. Вопрос: Какова вероятность того, что сотрудник работает на удаленке, если известно, что он работает меньше 8 часов в день?
4 521
Здесь перед присваиванием будет выполнено целочисленное деление, в результате которого дробная часть будет отбрасываться. В результате переменная half никогда не будет содержать дробную часть, и, например, функции process(2) и process(3) будут возвращать один и тот же результат.
Способы избежать этой ошибки:
Будьте внимательны при делении. Всегда спрашивайте себя, хотите ли вы получить округленный результат или вам нужна дробная часть.
В случае необходимости дробной части используйте явную константу с плавающей точкой или оператор приведения типа:
double half = value / 2.0; (явная константа double 2.0)
double half = (double) value / 2; (явный оператор приведения)
4 521
Ответ на вопрос про среднее значение двух интов:
Проблема в коде возникает из-за переполнения переменной типа int, так как значение суммы переменных a и b превышает максимально допустимое значение для типа int.
В языке Java int занимает 4 байта (32 бита), что позволяет хранить целые числа в диапазоне от -2,147,483,648 до 2,147,483,647.
Сумма a и b:
( a + b = 1,500,000,000 + 1,500,000,000 = 3,000,000,000 )
Это значение больше, чем максимальное значение для типа int (2,147,483,647). Поэтому происходит переполнение.
Когда происходит переполнение, результат «оборачивается» и начинает считаться от минимального значения переменной. Поэтому мы получим отрицательное значение. И в итоге будет -647483648
4 521
Ответ на вопрос про порядок инициализации:
ответ null, потому что Y.Y_FIELD в этом случае будет null, что бы понять это,
давайте посмотрим шаги инициализации этого кода:
Class X initializer starts
Class Y initializer starts
Y_FIELD = X.X_FIELD; // X.X_FIELD = null
Class Y initializer ends
X.y = new Y();
X.X_FIELD = "ttt".toUpperCase();
Class X initializer ends
То есть когда X_FIELD присваивается в переменную класса Y, поле еще null.
4 521
Ответ к вопросу про EntDto:
На первый взгляд может показаться, что все в порядке.
Однако это не работает: любая попытка создание экземпляра EntDto приводит к исключению NullPointerException. Инициализация поля random фактически является частью класса EntDto. конструктор, который выполняется после конструктора суперкласса. Когда выполняется конструктор суперкласса, поля подкласса не инициализируются. Однако мы вызываем переопределенный метод generateId(), который предполагает, что random уже инициализировано.
4 521
Этот код компилируется, но выдает совершенно неправильный результат:
[0, -1, -2, -3, 3, 1, 2]
Для Comparator, необходимо реализовать один метод compare(), который принимает два integer значения и возвращают int значение, знак которого показывает, какой из входных параметров больше.
Метод Integer.max() принимает два целочисленных значения и возвращает int, поэтому с точки зрения Java, он соответствует интерфейсу Comparator. Однако знак возвращаемого значения не показывает, какой из входных данных больше. Например max(2,3)=3, а в случае компаратора должен был бы вернуть отрицательное значение. Поэтому сортировка работает некорректно.
Чтобы исправить этот код, вы можете указать Comparator.naturalOrder().
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
