Свежая конфа по джаве (выложены записи докладов):
Java, Cloud, Data, AI, Robotics, Programming Languages, Security, Architecture, Developer Practices and Culture
https://youtube.com/playlist?list=PLKuh52zVrL6n_LKPLZN_n2tdYjACndZmB
Java, Cloud, Data, AI, Robotics, Programming Languages, Security, Architecture, Developer Practices and Culture
https://youtube.com/playlist?list=PLKuh52zVrL6n_LKPLZN_n2tdYjACndZmB
YouTube
2022 Devoxx UK
Share your videos with friends, family, and the world
🔥12
Обещал привести пример метода parseCatch для продакшена
Реализация зависит от конкретной логики приложения, которое использует этот метод
Общие вещи:
private Integer parseCatchProd(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return null;
}
}
такой вариант не подойдет, потому что мы будем терять exceptions, которые тут будут потеряны
Поэтому можно сделать, например, так:
private Integer parseCatchProd(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
log.error(e.getMessage(), e);
return null;
}
}
Далее: null возвращать обычно не самая хорошая идея, можно вернуть Optional
или какое-нибудь дефолтное значение, например, -1
Кроме того, возможно вообще не нужно делать catch внутри этого метода, если, например, у вас где-то уровнем выше обрабатываются уже такие ошибки
Как вариант, можно сделать так (если вам не очень критична производительность):
private Optional<Integer> parseCatchProd(String s) {
try {
return Optional.of(Integer.parseInt(s));
} catch (NumberFormatException e) {
log.error(e.getMessage(), e);
return Optional.empty();
}
}
Если это не так придется, как всегда, пожертовать чем-то, например, best practice:)
Реализация зависит от конкретной логики приложения, которое использует этот метод
Общие вещи:
private Integer parseCatchProd(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return null;
}
}
такой вариант не подойдет, потому что мы будем терять exceptions, которые тут будут потеряны
Поэтому можно сделать, например, так:
private Integer parseCatchProd(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
log.error(e.getMessage(), e);
return null;
}
}
Далее: null возвращать обычно не самая хорошая идея, можно вернуть Optional
или какое-нибудь дефолтное значение, например, -1
Кроме того, возможно вообще не нужно делать catch внутри этого метода, если, например, у вас где-то уровнем выше обрабатываются уже такие ошибки
Как вариант, можно сделать так (если вам не очень критична производительность):
private Optional<Integer> parseCatchProd(String s) {
try {
return Optional.of(Integer.parseInt(s));
} catch (NumberFormatException e) {
log.error(e.getMessage(), e);
return Optional.empty();
}
}
Если это не так придется, как всегда, пожертовать чем-то, например, best practice:)
👍14🔥7👏1
Ещё новость - завтра будет новый вопрос. Готовьтесь
👍15🔥7❤1
Какой из методов будет работать быстрее?
Anonymous Quiz
71%
initInteger1
7%
initInteger2
4%
initInteger3
17%
initInteger4
🔥17👍4
Какой из методов будет работать МЕДЛЕННЕЕ?
Anonymous Quiz
4%
initInteger1
54%
initInteger3
13%
initInteger4
16%
все медленные, это же java
13%
узнать ответы
👍16❤2👎2
На сколько initInteger1 быстрее будет чем initInteger3?
Anonymous Quiz
18%
< на 10% быстрее
29%
на 30%-50% быстрее
32%
в 1,5-2 раза быстрее
21%
> в 10 раз быстрее
👍9❤2
На сколько initInteger1 быстрее будет чем initInteger4?
Anonymous Quiz
23%
будут примерно одинаково
34%
на 10-20% быстрее
30%
в 1,5 раза быстрее
13%
в 10 раз быстрее
🔥8👍3
На сколько initInteger3 быстрее будет чем initInteger2?
Anonymous Quiz
48%
будут примерно одинаково
27%
на 20-30% быстрее
17%
в 1,5 раза быстрее
8%
в 10 раз быстрее
👍8🔥4❤2
Java Interview Tasks
Photo
Ответ к вопросу IntVsInteger:
initInteger1 создает примитив, поэтому это самый быстрый вариант.
initInteger2 создает объект-обертку для примитива, бенчмарк показывает, что такой вариант в разы медленнее,
это происходит, потому что initInteger2 создает каждый раз новый объект в хипе + оверхед на создание объекта + GC оверхед
initInteger4 чуть хуже чем создание примитива, так как мы все таки создаем объект изначально, но потом используем кеш
initInteger2 от initInteger3 сильно не отличаются, так как делают примерно одно и тоже
Так же считаю вопросы про конкретные значения между вариантами не корректными. Так как на разных версиях java, разных ОС
и разном hardware результаты могут сильно отличаться. Можно говорить только про результаты на конкретной машине.
Имеет смысл говорить про то, например, что один вариант сильно медленнее или быстрее, понимая из-за чего это происходит.
Поэтому таких вопросов, как последние 3, больше не будет.
Вот такие результаты я получил на своем ноутбуке:
java 8
initInteger1 создает примитив, поэтому это самый быстрый вариант.
initInteger2 создает объект-обертку для примитива, бенчмарк показывает, что такой вариант в разы медленнее,
это происходит, потому что initInteger2 создает каждый раз новый объект в хипе + оверхед на создание объекта + GC оверхед
initInteger4 чуть хуже чем создание примитива, так как мы все таки создаем объект изначально, но потом используем кеш
initInteger2 от initInteger3 сильно не отличаются, так как делают примерно одно и тоже
Так же считаю вопросы про конкретные значения между вариантами не корректными. Так как на разных версиях java, разных ОС
и разном hardware результаты могут сильно отличаться. Можно говорить только про результаты на конкретной машине.
Имеет смысл говорить про то, например, что один вариант сильно медленнее или быстрее, понимая из-за чего это происходит.
Поэтому таких вопросов, как последние 3, больше не будет.
Вот такие результаты я получил на своем ноутбуке:
java 8
Benchmark Mode Cnt Score Error Unitsjava 17
IntVsInteger.doNothing avgt 20 0.268 ± 0.006 ns/op
IntVsInteger.initInteger1 avgt 20 2.236 ± 0.018 ns/op
IntVsInteger.initInteger2 avgt 20 3.981 ± 0.104 ns/op
IntVsInteger.initInteger3 avgt 20 4.073 ± 0.145 ns/op
IntVsInteger.initInteger4 avgt 20 2.786 ± 0.043 ns/op
Benchmark Mode Cnt Score Error Units
IntVsInteger.doNothing avgt 20 0,451 ± 0,017 ns/op
IntVsInteger.initInteger1 avgt 20 2,103 ± 0,068 ns/op
IntVsInteger.initInteger2 avgt 20 4,056 ± 0,168 ns/op
IntVsInteger.initInteger3 avgt 20 4,332 ± 0,195 ns/op
IntVsInteger.initInteger4 avgt 20 2,394 ± 0,058 ns/op
🔥17❤2
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
#jmm #concurrency #java #java_interview_tasks
#jmm #concurrency #java #java_interview_tasks
👍11
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
Anonymous Quiz
40%
-1,42
29%
-1,42,0
19%
42
13%
-1
🔥11❤1
Ответ на вопрос VolatileVsFinal (https://t.me/java_interview_tasks/140) :
Тут речь идет об одном из самых интересных разрешенных сценариев JMM. Это тот факт, что volatile поле не имеет final семантики.
Это означает, что если мы публикуем ссылку объекта под гонкой, то мы можем увидеть дефолтное значение для volatile поля
Поэтому в данном случае 0 вполне можно получить.
Этот эффект можно увидеть на некоторых платформах, например AArch64:
Тут речь идет об одном из самых интересных разрешенных сценариев JMM. Это тот факт, что volatile поле не имеет final семантики.
Это означает, что если мы публикуем ссылку объекта под гонкой, то мы можем увидеть дефолтное значение для volatile поля
Поэтому в данном случае 0 вполне можно получить.
Этот эффект можно увидеть на некоторых платформах, например AArch64:
RESULT SAMPLES FREQ
-1 1,428,517,070 91.74%
0 7,105 <0.01%
42 128,534,641 8.25%
Telegram
Java Interview Tasks
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
#jmm #concurrency #java #java_interview_tasks
#jmm #concurrency #java #java_interview_tasks
👍16🔥7🤯3❤1
Jugru выложили недавно несколько видосов, один из которых по тематике канала:
https://youtu.be/4ESHltu1YBI
https://youtu.be/4ESHltu1YBI
YouTube
Техническое интервью с Евгением Борисовым
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Все вы знаете Евгения Борисова как знатока и потрошителя Spring. А что, если бы вы попали к нему на техническое собеседование? Прошли бы?
…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Все вы знаете Евгения Борисова как знатока и потрошителя Spring. А что, если бы вы попали к нему на техническое собеседование? Прошли бы?
…
👍18🔥6💩1
👍21🔥10👎9
Java Interview Tasks
Что напечатает код?
Ответ к вопросу про allMatch/anyMatch:
Малоизвестный факт, в документации написано следующее:
и
То есть allMatch() для пустого стрима вернет true, а anyMatch() вернет false.
Объяснить это можно так: для всех элементов пустого стрима любое условие выполнено.
В тоже время anyMatch вернет false, потому что нельзя найти элемент из коллекции, который удовлятворяет этому условию.
Такое поведение консистенто, например, для закона Де Моргана:
stream.allMatch(condition) равносильно !stream.anyMatch(!condition)
Малоизвестный факт, в документации написано следующее:
boolean allMatch(Predicate<? super T> predicate);
return true if either all elements of the stream match the
provided predicate or the stream is empty, otherwise false
и
boolean anyMatch(Predicate<? super T> predicate);
return true if any elements of the stream match the provided predicate, otherwise false
То есть allMatch() для пустого стрима вернет true, а anyMatch() вернет false.
Объяснить это можно так: для всех элементов пустого стрима любое условие выполнено.
В тоже время anyMatch вернет false, потому что нельзя найти элемент из коллекции, который удовлятворяет этому условию.
Такое поведение консистенто, например, для закона Де Моргана:
stream.allMatch(condition) равносильно !stream.anyMatch(!condition)
👍27🔥19🤔6👏2
Какие значения могут напечаться?
Anonymous Quiz
11%
"0, 0", "1, 1"
14%
"0, 0", "1, 1", "0, 1"
47%
"0, 0", "1, 1", "0, 1", "1, 0"
16%
"1, 1"
13%
"0, 0"
👍7🔥4👎2