Notes about Java 🌴
197 subscribers
41 photos
1 video
3 files
76 links
vk.com/notes_about_java
Научим программировать с нуля!
1. Видео на практике в коде
2. Краткие по времени
3. Очередной урок только на пройденном
4. Понятные аналогии
5. Можно скачать код занятий
@max_urusoff
Download Telegram
#javadoc

Пример кода в составе джавадока это не сложно.
Внутри фигурных скобок надо написать @code и далее описать как создать экземпляр класса и пользоваться методами.

https://www.baeldung.com/javadoc
👍3
#sparkcache #persist

Кэширование это тема.
Но перед тем как написать в коде .cache() надо взвесить - будет ли выхлоп с кэширования??

Стоит учесть, что это полезно ТОЛЬКО в том случае, когда есть многократное переиспользование одного и того же датафрейма!

Если как минимум 2 раза к КЭШИРОВАННОМУ датафрейму обращения не будет, то можно спокойно писать код и не занимайся этим кэшем.

Плюс отдельно надо сказать, что как правило оперативной памяти не хватает. Отсюда строгая рекомендация - если кэшировать, то только фильтрованный датафрейм! Например данные за сегодня или за интервал, но НЕ все данные гнать в память.

https://bigdataschool-ru.turbopages.org/turbo/bigdataschool.ru/s/blog/caching-in-spark-sql.html
👍3
#completionservice
#completablefuture

Отличный вопрос и пример кода асинхронной обработки taskов.
Надо сказать, что вопрос задан очень интересно🤔.

Ведь CompletionService предоставляет метод take() который может обрабатывать результат дальше по готовности без блокировки и ожидания потоков-соседей!

В данном случае CompletableFuture оказывается удобнее и богаче по набору методов для асинхронной обработки задач. Можно писать целые chainы логической последовательности действий.

Здесь кстати, чтобы разобраться в этом посте надо понимать что такое асинхронность вообще??

Вот видос от Luxsoft который поможет в этом разобраться!
https://youtu.be/yBF9VRiGkik


Ну и сама статья для примера:
https://stackoverflow.com/questions/63762096/completionservice-vs-completablefuture
👍4
#generics

Есть такие типы - дженерики называются. Ссылка для самообучения от javarush ниже.
Но сейчас не об этом.
Эта записка о том, что есть конвенция именования дженерик параметров ОДНОЙ ЗАГЛАВНОЙ БУКВОЙ.

Так вот, проблема в том, что на практике когда тебе нужны несколько параметров да ещё и с одинаковыми первыми буквами классов - это похоже на издевательство:
1. Не понятно по одной букве что за тип стоит за буквой.
2. Можно начать танцевать и добавить цифру к букве, НО читаемость это не сделает.

Поэтому удобнее делать дженерик типы по заглавным буквам интерфейса или класса.

И да я нарушу конвенцию, но я хоть смогу понять по коду что это за тип, вместо того, чтобы соблюдать конвенцию и мучаться.
Идёт эта конвенция именования лесом.

Оказывается я не одинок в этой мысли, вот ссылка на беседу:
https://stackoverflow.com/a/33394836

Что такое дженерик типы:
https://javarush.com/groups/posts/2004-teorija-dzhenerikov-v-java-ili-gde-na-praktike-stavitjh-skobki
👍1
#ssd
#linuxmint

Мой жёсткий диск на ноутбуке сгорел ещё во время первой волны ковида при вынужденной работе из дома.
Добрался до замены - взял SSD Kingston вместо обычного для ускорения.
Ощущения от SSD хорошие - установка новой ОС Linux Mint заняла всего около 10 минут. Под разработку и обучение самое то - рекомендую!

Качнуть актуальную версию можно по ссылке:

https://linuxmint.com/download.php
👍2🔥2
#asyncprofiler

Профилирование помогает найти утечки и проблемные зоны в коде по расходу процессора и памяти.
Итак жмем на методе с тестом в контекстном меню "Profile with Async Profiler" и запускаем.
Дальше во всей каше построенного графика можно не пытаться разобраться, а сразу в поиске вписать имя метода, который и надо проверить на корректность ожидаемой работы и поеданию ресурсов.

Бывает такое, что IDEA не может найти целевой метод - надо еще точнее написать тест, без ничего лишнего, а только на нужный метод.

Если проблемный метод не известен, то на графике надо искать самого жирного(по ширине) из тех методов, которые участвует по цепочке вызовов - он и есть нахлебник, которого надо исправлять.

Более подробно о том, как работать с результатами профилирования написано здесь:
https://www.jetbrains.com/help/idea/read-the-profiling-report.html
👍1
#asynchronous

Классная статья для понимания разницы между многопоточным и асинхронным выполнением.
А в самом деле есть ещё третий вид - это вкусный компот из обоих вместе!
Именно таким путём и развивается Java.

От многопоточного до асинхронно-многопоточного.

Хронология по функционалу:
ForkJoinPool->CompletableFuture->ReactiveStreams!

https://www.baeldung.com/cs/async-vs-multi-threading
👍1
#springdatajpa

На днях в коде проекта увидел @Entity класс помеченный @Data аннотацией от Lombok.
Благо у меня в IDEA подключён плагин JPA buddy.
А то так можно и не заметить.
Он сразу подсветил, что эта аннотация не применяется для entity сущностей, так как генерируемый код нарушает концепцию JPA и помешает нормально работать.
В том числе возможны и проблемы с производительностью.

При работе с JPA помните следующие правила:

1.Избегайте использования аннотаций @EqualsAndHashCode и @Data с JPA сущностями;

2.Исключайте ленивые поля при использовании аннотации @ToString;

3.Не забывайте добавлять аннотацию @NoArgsConstructor к сущностям помеченным аннотациями @Builder или @AllArgsConstructor. Это нужно, чтобы спринг мог работать с сущностью как он этого и ждёт - с конструктором без аргументов.

https://habr.com/ru/companies/haulmont/articles/564682/
👍1
#пасха

Христос Воскресе! Светлое Христово Воскресенье!
🥳
Удивительно, но это факт.
Я смотрел фильм научный где группа учёных физиков исследовали плащаницу в которую был завернут Иисус. По результатам они сказали, что для того чтобы так прожечь материал прям точно по контуру тела умершего, должно было быть подано напряжение около 600 Вольт. К сожалению это было по телевизору, может и найду ссылку. Но передача была.
В общем с ПАСХОЙ!
#hibernate
#springdatajpa

Короткое, но полезное видео от JetBrains. Мне понравилась опция создания Entity классов автоматически на основе таблиц из существующей БД средствами IDEA.

Можно смотреть с переводом на русский с Яндекс переводом для видео.

https://youtu.be/QJddHc41xrM
Channel name was changed to «Notes about Java 🌴»
#english

Dear followers.
I decided to post my experience in English. So that it will be available world wide also. Currently I'm looking for a platform where it's will be good to post articles in English and with code examples - with proper code formatting. Most probably it will be habrahabr. If you know some good platform apart from habr and stackoverflow, please leave your comment here. It should be Russian website, but with possibility to post in English.
Wish you peace in your life, Maksim.
👍1
#habr #completablefuture

And here is the first 🥇 article in english on HUBR with code examples.
You are welcome to join for comments if you like.
There are some current project interesting situations with code, which are still not posted. So in near future plan to write about it.

https://habr.com/en/articles/735126/
👍1
#springreactor #deadlock #flux #mono

My next article is about situation which I faced directly in my project at work. Have a look how call to Mono::block can just break reactive stream with full deadlock.
To be honest I feel my self very interesting when I saw how execution work for unlimited time and NOT STOP!
It is official BUG which registered in Spring Reactor project - be careful!

https://habr.com/en/articles/741464/
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
👍7🔥2
🥳
👍4