Что будет, если мы передадим для сохранения список Item'ов, у которых 0-й и 2-й элемент НЕ являются error items,
а 1-й - является (item.field = "error" для error item)?
а 1-й - является (item.field = "error" для error item)?
Anonymous Quiz
42%
Ничего не будет сохранено, поскольку RuntimeException в методе saveItem откатит транзакцию;
12%
Будет сохранен только 0-й элемент;
33%
Будет сохранен 0-й и 2-й элемент;
12%
Узнать ответ
2%
Я не использую транзакции
🔥8👍3
Ответ к вопросу про ошибки в транзакциях:
Правильный ответ - 3. (Будет сохранен 0-й и 2-й элемент)
Когда мы из компонента так вызываем метод того же компонента,
это просто вызов внутреннего метода, а не метода прокси-объекта. Он попросту игнорирует аннотацию
@Transactional у saveItem и не будет создавать новый транзакционный контекст. А значит RuntimeException не пересечет границу @Transactional-метода.
Правильный ответ - 3. (Будет сохранен 0-й и 2-й элемент)
Когда мы из компонента так вызываем метод того же компонента,
это просто вызов внутреннего метода, а не метода прокси-объекта. Он попросту игнорирует аннотацию
@Transactional у saveItem и не будет создавать новый транзакционный контекст. А значит RuntimeException не пересечет границу @Transactional-метода.
🔥6❤1
🔥7👍1
Оцените миграцию DB (синтаксис постгрес, миграция например для flyway):
create table if not exists test_table; Аргументацию пишите в комментарии.
create table if not exists test_table; Аргументацию пишите в комментарии.
Anonymous Poll
21%
1 - очень плохая
8%
2
24%
3
12%
4
35%
5 - самая правильная
👍2🔥2
Что может напечатать код?
Anonymous Quiz
22%
всегда true
24%
всегда false
36%
и true и false
17%
узнать ответ
🔥8👍4
Ответ к вопросу про миграцию в бд (https://t.me/java_interview_tasks/276):
У миграции 'create table if not exists test_table ...' есть недостаток - 'if not exists',
она в некоторых случаях может скрывать от вас проблемы в схеме вашей бд, то есть если в данном примере таблица
test_table уже есть в бд, ничего не произойдет, но возможно у вас таблица в базе с другими колонками и это проблема будет проигнорирована
В целом использование конструкций вроде 'if not exists' для миграций часто считается плохой практикой.
У миграции 'create table if not exists test_table ...' есть недостаток - 'if not exists',
она в некоторых случаях может скрывать от вас проблемы в схеме вашей бд, то есть если в данном примере таблица
test_table уже есть в бд, ничего не произойдет, но возможно у вас таблица в базе с другими колонками и это проблема будет проигнорирована
В целом использование конструкций вроде 'if not exists' для миграций часто считается плохой практикой.
Telegram
Java Interview Tasks
Оцените миграцию DB (синтаксис постгрес, миграция например для flyway):
create table if not exists test_table; Аргументацию пишите в комментарии.
1 - очень плохая / 2 / 3 / 4 / 5 - самая правильная
create table if not exists test_table; Аргументацию пишите в комментарии.
1 - очень плохая / 2 / 3 / 4 / 5 - самая правильная
🔥6👍5👎1
Что будет если thread запустить дважды?
Anonymous Quiz
23%
"test" напечатается дважды, ошибок не будет
5%
"test" напечатается дважды и будет эксепшен
10%
"test" напечатается один раз, ошибок не будет
32%
"test" напечатается один раз и будет ексепшен
8%
будет ошибка компиляции
5%
будет краш jvm
17%
узнать ответ
👍6🔥4
Ответ к вопросу про повторный запуск потока (https://t.me/java_interview_tasks/281) :
"test" напечатается один раз и на повторyый вызов метода start будет IllegalThreadStateException
Если поток был запущен, то повторно запустить его нельзя
"test" напечатается один раз и на повторyый вызов метода start будет IllegalThreadStateException
Если поток был запущен, то повторно запустить его нельзя
Telegram
Java Interview Tasks
Что будет если thread запустить дважды?
🔥9👍4👏1
Оцените по 10-ти бальной шкале код выше:
Anonymous Poll
50%
1
8%
2
6%
3
4%
4
5%
5
2%
6
1%
7
1%
8
0%
9
22%
10
🔥6👍3
Можно ли будет понять, в каком месте выбросится NPE, если какая- то из вложенных мап вернет null?
Anonymous Quiz
13%
да, всегда
30%
можно понять, начиная с 16-ой джавы
28%
нельзя понять
29%
узнать ответ
❤5🔥4👍2
Ответ к вопросу про get chain с NPE:
В джава 16 появилась новая фича, которая показывает больше деталей про место, в котором произошел NPE (детали например тут - https://www.baeldung.com/java-14-nullpointerexception)
Но в данном случае будет так -
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Map.get(Object)" because the return value of "java.util.Map.get(Object)" is null
at test.Test.testMap(Test.java:46)
Фактически новая фича ничем не помогает в данном случае.
Я бы не рекомендовал писать такой код, в случае возникновения null значений в мапах, по ошибкам не будет понятно, где искать проблему. Такой код сложно отлаживать и поддерживать. Возможно он бы имел место, если бы было известно, что map.get всегда будут не null
В джава 16 появилась новая фича, которая показывает больше деталей про место, в котором произошел NPE (детали например тут - https://www.baeldung.com/java-14-nullpointerexception)
Но в данном случае будет так -
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Map.get(Object)" because the return value of "java.util.Map.get(Object)" is null
at test.Test.testMap(Test.java:46)
Фактически новая фича ничем не помогает в данном случае.
Я бы не рекомендовал писать такой код, в случае возникновения null значений в мапах, по ошибкам не будет понятно, где искать проблему. Такой код сложно отлаживать и поддерживать. Возможно он бы имел место, если бы было известно, что map.get всегда будут не null
Baeldung
Helpful NullPointerExceptions in Java | Baeldung
Learn about helpful NullPointerExceptions in Java 14.
👍7🔥2
Предположим, у вас есть приложение (64bit jvm , default settings), в котором выделено 32 гб хипа, вы хотите увеличить размер хипа
Какой новый размер целесообразно выбрать ?
Какой новый размер целесообразно выбрать ?
Anonymous Quiz
6%
36 гб
8%
42 гб
33%
64
21%
Больше 32 гб хип нельзя сделать в jvm
32%
узнать ответ
👍10🔥2👎1
Forwarded from xpinjection
Если вы разрабатываете на Java, то видео доклада в этом посте точно расширит ваш кругозор. Java выбирают даже не за язык, а скорее за огромную экосистему, в которой разработчики могут найти готовые решения для практически любых задач. Эту экосистему важно знать. В докладе рассматривается большой список библиотек из мира Java для решения конкретных прикладных задач.
Если вы не разрабатываете на Java, но знаете Java разработчиков, поделитесь с ними этим видео. Они точно скажут вам спасибо! :)
#Java
https://youtube.com/watch?v=ABm0KhsZJ0c&feature=share9
Если вы не разрабатываете на Java, но знаете Java разработчиков, поделитесь с ними этим видео. Они точно скажут вам спасибо! :)
#Java
https://youtube.com/watch?v=ABm0KhsZJ0c&feature=share9
YouTube
Java's Hidden Gems: Tools and Libraries by Johan Janssen
For more info on the next Devoxx UK event 👉 www.devoxx.co.uk
This session is a whirlwind tour of many lesser known, but very interesting, Java tools and libraries. We'll have a sneak peak at dozens of tools to improve security, builds, architecture, tests…
This session is a whirlwind tour of many lesser known, but very interesting, Java tools and libraries. We'll have a sneak peak at dozens of tools to improve security, builds, architecture, tests…
🔥9👍5👏1
Разъяснение про увеличение хипа:
В 64 битной JVM существует сжатия указателей, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23
Если размер хипа для вашей программы больше 32GB, то сжатие перестает работать и все указатели становятся размером в 8 байт (в два раза больше).
То есть, увеличивая хип с 32гб на 40гб, вы не увеличиваете фактически хип, а уменьшаете его!
Получается, что имеет смысл увеличивать с 32гб хип сразу на что-то большее 48гб.
Ссылки по теме:
На русском - https://habr.com/ru/articles/440166/
Compressed oops in the Hotspot JVM - https://wiki.openjdk.java.net/display/HotSpot/CompressedOops
How does JVM allocate objects - https://umumble.com/blogs/java/how-does-jvm-allocate-objects%3F/
CompressedOops: Introduction to compressed references in Java - https://www.javacodegeeks.com/2016/05/compressedoops-introduction-compressed-references-java.html
Trick behind JVM's compressed Oops - https://stackoverflow.com/questions/25120546/trick-behind-jvms-compressed-oops
Java HotSpot Virtual Machine Performance Enhancements - https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html
В 64 битной JVM существует сжатия указателей, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23
Если размер хипа для вашей программы больше 32GB, то сжатие перестает работать и все указатели становятся размером в 8 байт (в два раза больше).
То есть, увеличивая хип с 32гб на 40гб, вы не увеличиваете фактически хип, а уменьшаете его!
Получается, что имеет смысл увеличивать с 32гб хип сразу на что-то большее 48гб.
Ссылки по теме:
На русском - https://habr.com/ru/articles/440166/
Compressed oops in the Hotspot JVM - https://wiki.openjdk.java.net/display/HotSpot/CompressedOops
How does JVM allocate objects - https://umumble.com/blogs/java/how-does-jvm-allocate-objects%3F/
CompressedOops: Introduction to compressed references in Java - https://www.javacodegeeks.com/2016/05/compressedoops-introduction-compressed-references-java.html
Trick behind JVM's compressed Oops - https://stackoverflow.com/questions/25120546/trick-behind-jvms-compressed-oops
Java HotSpot Virtual Machine Performance Enhancements - https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html
Хабр
Сжатие указателей в Java
В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit , которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23....
🔥15👍2👏1
В чем разница между interrupted() и isInterrupted() в классе Thread?
Anonymous Quiz
4%
разницы нет
69%
interrupted() сбрасывает флаг прерывания текущего потока, isInterrupted возвращет этот флаг
26%
interrupted() возвращает флаг прерывания для потока, isInterrupted возвращает и сбрасывает флаг
🔥9❤1
Ответ к вопросу про разницу между interrupted() и isInterrupted() :
Метод interrupt() выставляет флаг прерывания на конкретном потоке, указывая, что ему следует остановиться. Ставит значение флага true.
Статический метод Thread.interrupted() возвращает значение флага прерывания для текущего потока. После проверки всегда присваивает значение флага false и запускает поток.
Метод isInterrupted() возвращает значение флага прерывания для того объекта, на котором вызван. Не запускает поток.
Метод interrupt() выставляет флаг прерывания на конкретном потоке, указывая, что ему следует остановиться. Ставит значение флага true.
Статический метод Thread.interrupted() возвращает значение флага прерывания для текущего потока. После проверки всегда присваивает значение флага false и запускает поток.
Метод isInterrupted() возвращает значение флага прерывания для того объекта, на котором вызван. Не запускает поток.
🔥12👍2