🔍 Ответ на задачу про Integer: Когда 100 == 100, а 1000 != 1000? 🧐
Многие начинающие (и не только) джависты спотыкаются на сравнении объектов-оберток через
Объяснение:
В Java существует Integer Cache. При автоупаковке (autoboxing) вызывается метод
Для экономии памяти JVM кеширует объекты Integer в диапазоне от -128 до 127.
Поэтому
Для числа 1000 кеша нет, создаются два разных объекта в куче — и
Вывод:
Никогда не сравнивайте объекты-обертки через
⚡️ Не перепутайте:
- Для сравнения значений объектов всегда используйте
- Помните, что верхнюю границу кеша можно изменить через флаг
Хочешь больше таких нюансов? Ставь 🔥 и делись с коллегами!
#java #integer #cache #jvm #autoboxing #interview #java_interview_tasks
Многие начинающие (и не только) джависты спотыкаются на сравнении объектов-оберток через
==.Объяснение:
В Java существует Integer Cache. При автоупаковке (autoboxing) вызывается метод
Integer.valueOf(int).Для экономии памяти JVM кеширует объекты Integer в диапазоне от -128 до 127.
Поэтому
a и b ссылаются на один и тот же объект в кеше — и == возвращает true.Для числа 1000 кеша нет, создаются два разных объекта в куче — и
== (сравнение ссылок) возвращает false.Вывод:
Никогда не сравнивайте объекты-обертки через
==, если только вы не хотите проверить идентичность ссылок.⚡️ Не перепутайте:
- Для сравнения значений объектов всегда используйте
.equals().- Помните, что верхнюю границу кеша можно изменить через флаг
-XX:AutoBoxCacheMax=<size>.Хочешь больше таких нюансов? Ставь 🔥 и делись с коллегами!
#java #integer #cache #jvm #autoboxing #interview #java_interview_tasks
👍7🔥7❤1
Что выведет данный код?
Anonymous Quiz
15%
true, true
12%
false, false
66%
false, true
8%
true, false
👍4
Что выведет данный код?
String s1 = "Java";
String s2 = new String("Java");
String s3 = s2.intern();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
👍4
🔍 Ответ на задачу про String Pool: Магия intern() или где живет ваша строка? 🧵
Сравнение строк в Java через
Объяснение:
-
-
- Метод
Вывод:
⚡️ Не перепутайте:
-
-
-
#java #string #stringpool #intern #jvm #interview #java_interview_tasks
Сравнение строк в Java через
== — это классика интервью. Но что произойдет, если мы начнем вручную управлять пулом строк?Объяснение:
-
s1 — это строковый литерал, он сразу попадает в String Pool.-
s2 создается через new String(), поэтому в куче (heap) создается новый объект, отличный от того, что в пуле. Сравнение s1 == s2 дает false.- Метод
intern() ищет строку в пуле. Если она там есть, он возвращает ссылку на объект из пула. Так как "Java" уже там была (от s1), s3 получит ту же самую ссылку.Вывод:
s1 == s3 вернет true, так как обе переменные теперь ссылаются на один и тот же объект в String Pool.⚡️ Не перепутайте:
-
== сравнивает ссылки.-
equals() сравнивает содержимое.-
intern() — полезный инструмент для экономии памяти, если у вас много повторяющихся строк, созданных динамически.#java #string #stringpool #intern #jvm #interview #java_interview_tasks
1👍6
В чем главное отличие CompletableFuture `join()` от `get()`?
Anonymous Quiz
6%
`join()` работает быстрее.
57%
`join()` не выбрасывает проверяемые (checked) исключения.
25%
`get()` нельзя использовать в лямбда-выражениях.
12%
`join()` автоматически перезапускает задачу при ошибке.
👍4❤1🔥1
🔍 Ответ на задачу про CompletableFuture: join() vs get() 🥊
Объяснение:
Оба метода ждут завершения задачи, но делают это по-разному.
Вывод:
Логика ожидания у них одинаковая, разница только в обработке ошибок.
#java #completablefuture #concurrency #exception #java8 #backend #интервью #java_interview_tasks
Объяснение:
Оба метода ждут завершения задачи, но делают это по-разному.
get() объявлен в интерфейсе Future и выбрасывает InterruptedException и ExecutionException (оба checked). Это заставляет вас писать try-catch. join() — это метод CompletableFuture, он выбрасывает CompletionException (runtime), что гораздо удобнее при использовании в Stream API и лямбдах.Вывод:
Логика ожидания у них одинаковая, разница только в обработке ошибок.
#java #completablefuture #concurrency #exception #java8 #backend #интервью #java_interview_tasks
🔥7
👍3🔥1
Понимание порядка инициализации полей и блоков — база для предсказания поведения сложных объектов.
В каком порядке выведутся цифры?
В каком порядке выведутся цифры?
class Parent {
static { System.out.print("1"); }
{ System.out.print("2"); }
Parent() { System.out.print("3"); }
}
class Child extends Parent {
static { System.out.print("4"); }
{ System.out.print("5"); }
Child() { System.out.print("6"); }
}
public class Main {
public static void main(String[] args) {
new Child();
}
}👻4
🔍 Ответ на задачу про порядок инициализации: Кто первый — блок или конструктор? 🏗
Правило:
1. Сначала статические блоки родителя, потом ребенка (при первой загрузке класса).
2. Затем нестатические блоки родителя и его конструктор.
3. Только после этого нестатические блоки ребенка и его конструктор.
Вывод:
Сначала статика: 1, 4. Затем родитель: 2, 3. Затем ребенок: 5, 6. Итого: 142356.
⚡️ Не перепутайте:
Статика выполняется только один раз при загрузке класса, а обычные блоки — при каждом создании объекта перед конструктором.
#java #initialization #static #constructor #oop #интервью #java_interview_tasks
Правило:
1. Сначала статические блоки родителя, потом ребенка (при первой загрузке класса).
2. Затем нестатические блоки родителя и его конструктор.
3. Только после этого нестатические блоки ребенка и его конструктор.
Вывод:
Сначала статика: 1, 4. Затем родитель: 2, 3. Затем ребенок: 5, 6. Итого: 142356.
⚡️ Не перепутайте:
Статика выполняется только один раз при загрузке класса, а обычные блоки — при каждом создании объекта перед конструктором.
#java #initialization #static #constructor #oop #интервью #java_interview_tasks
❤5👍5🔥1🐳1
Что напечатает программа, если и `close()`, и тело `try` кидают исключения?
Anonymous Quiz
27%
Close Error
31%
Try Error
29%
Try Error и Close Error
13%
Ошибка компиляции.
🔥4👍1
Механизм try-with-resources (Java 7+) сильно упростил жизнь, но у него есть нюанс с "подавленными" (suppressed) исключениями.
Что напечатает программа, если и
Что напечатает программа, если и
close(), и тело try кидают исключения?class Door implements AutoCloseable {
public void close() { throw new RuntimeException("Close Error"); }
}
try (Door d = new Door()) {
throw new RuntimeException("Try Error");
} catch (Exception e) {
System.out.println(e.getMessage());
}🔥5❤3
🔍 Ответ на задачу про try-with-resources: Куда делось исключение? 🛡
В try-with-resources основным считается исключение, возникшее в блоке
Вывод:
Метод
⚡️ Не перепутайте:
В старом стиле (через
#java #exceptions #trywithresources #suppressed #clean_code #интервью #java_interview_tasks
В try-with-resources основным считается исключение, возникшее в блоке
try. Если при автоматическом закрытии ресурсов тоже возникнет исключение, оно не затрет основное, а будет добавлено в список "подавленных" (доступно через e.getSuppressed()).Вывод:
Метод
getMessage() вернет только основное исключение — "Try Error".⚡️ Не перепутайте:
В старом стиле (через
finally) исключение из finally могло "проглотить" исключение из try. Try-with-resources решает эту проблему.#java #exceptions #trywithresources #suppressed #clean_code #интервью #java_interview_tasks
🔥3👀1
🔍 Ответ на задачу про SQL: LEFT JOIN + WHERE — скрытый баг 🐛
Однако условие
Вывод:
Чтобы сохранить поведение
#sql #leftjoin #where #bug #database #интервью #java_interview_tasks
LEFT JOIN гарантирует, что все строки из левой таблицы (customers) попадут в результат, даже если в правой таблице (products) нет совпадений — в этом случае столбцы правой таблицы заполняются NULL.Однако условие
WHERE p.status = 'SHIPPED' отфильтровывает все строки, где p.status IS NULL. Это означает, что клиенты без заказов будут исключены из результата, и LEFT JOIN фактически превратится в INNER JOIN.Вывод:
WHERE по правой таблице превращает LEFT JOIN в INNER JOIN.Чтобы сохранить поведение
LEFT JOIN, условие фильтрации нужно перенести в ON:SELECT c.NAME,
p.product_id
FROM customers c
LEFT JOIN products p
ON c.id = p.customer_id
AND p.status = 'SHIPPED';
#sql #leftjoin #where #bug #database #интервью #java_interview_tasks
🔥4👍2👎2
Что выведет код?
Anonymous Quiz
21%
true, true
32%
false, true
27%
false, false
20%
NullPointerException
🔥4👍2❤1
Оператор
Что выведет код?
instanceof кажется простым, но его поведение с null иногда застает врасплох.Что выведет код?
String s = null;
System.out.println(s instanceof String);
System.out.println(s instanceof Object);
👍6🔥2
🔍 Ответ на задачу про instanceof: А если там null? 🧐
Согласно спецификации Java, оператор
Вывод:
Оба сравнения вернут
⚡️ Не перепутайте:
Вам не нужно проверять
#java #instanceof #null #basics #интервью #java_interview_tasks
Согласно спецификации Java, оператор
instanceof всегда возвращает false, если левый операнд равен null. При этом никакой ошибки (NPE) не возникает.Вывод:
Оба сравнения вернут
false. null не является экземпляром ни одного класса, даже Object.⚡️ Не перепутайте:
Вам не нужно проверять
s != null перед использованием instanceof. Сам оператор уже делает эту проверку за вас.#java #instanceof #null #basics #интервью #java_interview_tasks
🔥9👍1👀1
Что вернет метод `thenRun()`, если предыдущий этап вернул строку "Success"?
Anonymous Quiz
20%
CompletableFuture<String> со значением "Success".
50%
CompletableFuture<Void>.
24%
CompletableFuture<String> со значением "Done".
7%
Результат будет null.
🔥3👍1👀1
Асинхронное программирование — мощная концепция, но важно понимать разницу в цепочках методов.
Что вернет метод
Что вернет метод
thenRun(), если предыдущий этап вернул строку "Success"?CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Success");
CompletableFuture<Void> result = future.thenRun(() -> System.out.println("Done"));
👍3🔥3❤1
🔍 Ответ на задачу про CompletableFuture: thenRun, thenAccept или thenApply? 🚀
-
-
-
Вывод:
⚡️ Не перепутайте:
Выбирайте метод в зависимости от того, нужны ли вам входные данные от предыдущего шага и хотите ли вы что-то передать дальше.
#java #concurrency #completablefuture #async #multithreading #интервью #java_interview_tasks
-
thenApply(Function) — принимает результат, возвращает новый результат (меняет тип).-
thenAccept(Consumer) — принимает результат, ничего не возвращает (CompletableFuture<Void>).-
thenRun(Runnable) — не принимает результат и ничего не возвращает (CompletableFuture<Void>). Используется просто для запуска кода после завершения этапа.Вывод:
thenRun всегда возвращает CompletableFuture<Void>, игнорируя результат предыдущего шага.⚡️ Не перепутайте:
Выбирайте метод в зависимости от того, нужны ли вам входные данные от предыдущего шага и хотите ли вы что-то передать дальше.
#java #concurrency #completablefuture #async #multithreading #интервью #java_interview_tasks
👍6❤3🔥1