Ответ на вопрос про деление int:
Операция деления в Java для целых чисел (int) отбрасывает дробную часть. Таким образом, 3 / 2 будет равно 1
Операция деления в Java для целых чисел (int) отбрасывает дробную часть. Таким образом, 3 / 2 будет равно 1
🔥8👍2🐳2
var b = 0.0 > -0.0;
Anonymous Quiz
33%
b = true
45%
b = false
7%
будет NPE
9%
что-то еще
6%
узнать ответ
🔥8👍3🐳2❤1🥱1
🔥7👍3❤2🙏1🥱1
Ответ на вопросы про сравнение double:
Сравнение 0.0 > -0.0 возвращает false, поскольку 0.0 не больше -0.0. Если бы использовался оператор == для сравнения, то 0.0 == -0.0 вернуло бы true.
Это происходит потому, что в Java 0.0 и -0.0 считаются разными значениями с плавающей точкой. Однако при сравнении с использованием оператора > (больше) Java считает оба значения равными.
Сравнение 0.0 > -0.0 возвращает false, поскольку 0.0 не больше -0.0. Если бы использовался оператор == для сравнения, то 0.0 == -0.0 вернуло бы true.
Это происходит потому, что в Java 0.0 и -0.0 считаются разными значениями с плавающей точкой. Однако при сравнении с использованием оператора > (больше) Java считает оба значения равными.
Telegram
Java Interview Tasks
var b = 0.0 > -0.0;
b = true / b = false / будет NPE / что-то еще / узнать ответ
b = true / b = false / будет NPE / что-то еще / узнать ответ
👍6🔥1🙏1
Уже в 4-ый раз встречаю на собеседовании задачу про зацикленный поезд.
Вот здесь хорошее объяснение:
https://youtu.be/YMYjjoiE0xI?si=66g8-2EfNVgJ79DZ
Вот здесь хорошее объяснение:
https://youtu.be/YMYjjoiE0xI?si=66g8-2EfNVgJ79DZ
YouTube
✓ Зацикленный поезд | Ботай со мной #004 | Борис Трушин
#БотайСоМной #004. Зацикленный поезд
По кольцевой железной дороге едет поезд, последний вагон которого сцеплен с первым так, что внутри можно свободно перемещаться между вагонами. Вы оказались в одном случайном вагоне и ваша задача -- подсчитать их общее…
По кольцевой железной дороге едет поезд, последний вагон которого сцеплен с первым так, что внутри можно свободно перемещаться между вагонами. Вы оказались в одном случайном вагоне и ваша задача -- подсчитать их общее…
🔥4👍1🙏1
✨ Ответ на вопрос про передачу переменных и их влияние на результаты ✨
🔍 Пояснение:
Первый вызов: recalculate(i)
Переменная i имеет значение 1.
При передаче i в метод recalculate(int i), создаётся копия значения 1.
Внутри метода i присваивается значение 2, и метод возвращает 2.
Однако, оригинальная переменная i в main остаётся равной 1.
Вывод: 2 (результат метода)
Второй вывод: System.out.print(i)
Печатаем оригинальное значение i, которое осталось 1.
Вывод: 1
Третий вызов: recalculateInt(j)
j - это объект типа Integer, который также имеет значение 1.
Передача j в метод recalculateInt(Integer i) создает ссылку на объект, однако при присваивании i = 2 мы создаем новую ссылку, которая не влияет на оригинальный объект j в main.
Метод возвращает 2.
Вывод: 2 (результат метода)
Четвёртый вывод: System.out.print(j)
Оригинальная переменная j остается равной 1, потому что Integer является неизменяемым классом в Java.
Вывод: 1
📌 Итоговый вывод программы:
2121
⚡️ Вывод: В Java важно понимать различие между примитивными типами и объектами. Примитивы передаются по значению, а объекты – по ссылке, что приводит к таким результатам. 🎉
🔍 Пояснение:
Первый вызов: recalculate(i)
Переменная i имеет значение 1.
При передаче i в метод recalculate(int i), создаётся копия значения 1.
Внутри метода i присваивается значение 2, и метод возвращает 2.
Однако, оригинальная переменная i в main остаётся равной 1.
Вывод: 2 (результат метода)
Второй вывод: System.out.print(i)
Печатаем оригинальное значение i, которое осталось 1.
Вывод: 1
Третий вызов: recalculateInt(j)
j - это объект типа Integer, который также имеет значение 1.
Передача j в метод recalculateInt(Integer i) создает ссылку на объект, однако при присваивании i = 2 мы создаем новую ссылку, которая не влияет на оригинальный объект j в main.
Метод возвращает 2.
Вывод: 2 (результат метода)
Четвёртый вывод: System.out.print(j)
Оригинальная переменная j остается равной 1, потому что Integer является неизменяемым классом в Java.
Вывод: 1
📌 Итоговый вывод программы:
2121
⚡️ Вывод: В Java важно понимать различие между примитивными типами и объектами. Примитивы передаются по значению, а объекты – по ссылке, что приводит к таким результатам. 🎉
👍8❤2🔥2
корректно ли будет работать код в многопоточной среде?
Anonymous Quiz
20%
да
65%
нет
14%
узнать ответ
🔥4👍2❤1
Ответ про код с ConcurrencyStorage:
Тут concurrency проблема, связанная с тем,
что ссылка на storage заново присваивается в методе fillStorage()
и нет гарантий что другой поток, который вызовет метод getValue() увидит данные,
обновленные в fillStorage();
Что бы эту проблему исправить, можно, например, сделать поле storage volatile:
private volatile ConcurrentMap<String, String> storage = new ConcurrentHashMap<>();
Тут concurrency проблема, связанная с тем,
что ссылка на storage заново присваивается в методе fillStorage()
и нет гарантий что другой поток, который вызовет метод getValue() увидит данные,
обновленные в fillStorage();
Что бы эту проблему исправить, можно, например, сделать поле storage volatile:
private volatile ConcurrentMap<String, String> storage = new ConcurrentHashMap<>();
Telegram
Java Interview Tasks
#concurrency корректно ли будет работать код в многопоточной среде?
👍6🔥2🙏1
корректно ли будет работать код в многопоточной среде?
Anonymous Quiz
22%
да
67%
нет
11%
узнать ответ
🔥3👍2🙏1
Ответ про второй код с ConcurrencyStorage2:
Тут тоже concurrency проблема, связанная с тем, что теперь поле volatile, но сама мапа не thread-safe и поэтому нет гарантий,
что другие потоки увидят данные обновленные в fillStorage();
Что бы исправить эту проблему, можно взять ConcurrentHashMap и использовать его как storage;
Тут тоже concurrency проблема, связанная с тем, что теперь поле volatile, но сама мапа не thread-safe и поэтому нет гарантий,
что другие потоки увидят данные обновленные в fillStorage();
Что бы исправить эту проблему, можно взять ConcurrentHashMap и использовать его как storage;
Telegram
Java Interview Tasks
#concurrency2 корректно ли будет работать код в многопоточной среде?
👍11🔥1🙏1
Что будет в результате выполнения кода?
Anonymous Quiz
43%
Ошибок не будет
15%
Будет рантайм ексепшн
32%
Будет ошибка компиляции
10%
Узнать ответ?
👍3🔥2🙏2😭1
Что будет в результате выполнения кода?
Anonymous Quiz
60%
Ошибок не будет
15%
Будет рантайм эксепшн
17%
Будет ошибка компиляции
8%
Узнать ответ
🔥6👍2❤1
Ответ на вопросы про List<?>:
List<?> это список элементов неизвестного типа. Он применяется в ситуациях, когда важно работать с самим списком, но конкретный тип элементов в нём не имеет значения. Из такого списка можно только извлекать значения, но нельзя добавлять новые элементы (кроме null). Поэтому в первом коде будет ошибка компиляции, а во втором будет все хорошо.
List<?> это список элементов неизвестного типа. Он применяется в ситуациях, когда важно работать с самим списком, но конкретный тип элементов в нём не имеет значения. Из такого списка можно только извлекать значения, но нельзя добавлять новые элементы (кроме null). Поэтому в первом коде будет ошибка компиляции, а во втором будет все хорошо.
Telegram
Java Interview Tasks
Что будет в результате выполнения кода?
👍13🔥3🤔1🙏1
Что напечатает строчка System.out.println(exceptionCount)?
Anonymous Quiz
31%
0
29%
1
26%
2
8%
3
6%
4
👍4🔥2🙏1
Ответ на вопрос про вставку null в мапы:
При вставке значений в HashMap:
HashMap допускает хранение null в качестве ключей и значений. Поэтому вызовы fillData(hashMap, "1", null) и fillData(hashMap, null, "1") не приведут к исключениям.
Напротив, ConcurrentHashMap не допускает null в качестве ключей или значений:
В вызове fillData(concurrentHashMap, "1", null) будет выброшено NullPointerException, поскольку значение null нельзя вставить в ConcurrentHashMap.
В вызове fillData(concurrentHashMap, null, "1") также произойдет NullPointerException, так как ключ null не допускается.
Таким образом, каждое из двух вызовов с concurrentHashMap приведет к исключению, увеличивая счетчик exceptionCount на 1 в каждом случае.
Итого, программа напечатает 2.
Это различие между мапами надо помнить, например, если вы делаете замену в коде HashMap -> ConcurrentHashMap. При этом меняется семантика, если ваш код работает с null ключами или значениями.
При вставке значений в HashMap:
HashMap допускает хранение null в качестве ключей и значений. Поэтому вызовы fillData(hashMap, "1", null) и fillData(hashMap, null, "1") не приведут к исключениям.
Напротив, ConcurrentHashMap не допускает null в качестве ключей или значений:
В вызове fillData(concurrentHashMap, "1", null) будет выброшено NullPointerException, поскольку значение null нельзя вставить в ConcurrentHashMap.
В вызове fillData(concurrentHashMap, null, "1") также произойдет NullPointerException, так как ключ null не допускается.
Таким образом, каждое из двух вызовов с concurrentHashMap приведет к исключению, увеличивая счетчик exceptionCount на 1 в каждом случае.
Итого, программа напечатает 2.
Это различие между мапами надо помнить, например, если вы делаете замену в коде HashMap -> ConcurrentHashMap. При этом меняется семантика, если ваш код работает с null ключами или значениями.
Telegram
Java Interview Tasks
Что напечатает строчка System.out.println(exceptionCount)?
👍13🔥2🙏1