Java guru
5.24K subscribers
1 photo
1 video
1 file
261 links
Новости из мира Java, обзоры интересных библиотек и фреймворков, обучающие статьи. Онлайн обсуждения актуальных тем и обмен опытом. Для связи @RodmanDV
Download Telegram
«Почему Kotlin хуже, чем Java?»

Недавно наткнулся на интересную статью. Сейчас достаточно много материала рекламирующего Kotlin, но большая редкость встретить материал рассказывающий о минусах.

Помню время когда толпы разработчиков "бегали" со Scala говоря о нем как об "очередном убийце" Java, но этого не случилось. Scala хороший язык и я ничего против него не имею. Он занял свою нишу, но сильно потеснить Java не смог.

И вот на сцене "очередной убийца" Java )) Так его преподносят некоторые разработчики. Возможно это те кто раньше пытались "убить Scala-ой" Java ))

Я считаю, что в Kotlin есть много интересных фишек и как язык он мне нравится. Перечисление фишек есть в любом "рекламном буклете" про него. Думаю, что он тоже со временем займет свою нишу и страсти вокруг него поугаснут. С большой долей вероятности он станет доминировать в Android разработке, но займет ли доминирующую позицию на беке...время покажет ))

Как вы относитесь к Kotlin и что думаете о статье? Поделитесь мнением в комментариях.

Рекомендую ознакомиться со статьей:
https://habr.com/en/company/funcorp/blog/558412/
IntelliJ IDEA 2021.2

Хочу поздравить всех любителей IntelliJ IDEA с выходом новой версии!!!

Лично меня в прошлой версии раздражал баг в Run Configuration на маке.
При выборе конфигурации название иногда не обновлялось, но конфигурация переключалась.
Сегодня после обновления бага ушла ))

Из интересных фишек (из списка изменений) лично для меня в этом релизе:
1. появилась поддержка gRPC
2. появилась поддержка Protocol Buffers
3. работа с Docker по SSH
4. Test Data plugin для генерации тестовых данных для тестов по Cmd+N

Очень хочется все попробовать )) Впечатление напишу позже как распробую ))

Какие фичи вы считаете интересными в новом релизе?

https://www.jetbrains.com/idea/whatsnew/
C10K Problem

Сегодня я поделюсь с Вами ссылкой на очень интересную статью про проблему C10k. Думаю многие слышали об этой проблеме и возможно сталкивались. Статья интересна тем, что в ней даются советы и рекомендации для Java разработчиков.

В статье даются также рекомендации по тюнингу операционной системы и пример использования bpftrace для диагностики проблемы.

Лично мне в этой статье особенно понравился разбор использования DirectByteBuffer и доп материал по ссылке "...об утечках памяти в ByteBuffer".

https://proglib.io/p/principy-obrabotki-tysyach-soedineniy-v-java-2020-04-04

Оригинал с моего любимого ресурса

https://dzone.com/articles/thousands-of-socket-connections-in-java-practical
Java Tricks

Начинаю серию публикаций в которых поделюсь лайфхаками. Как оказалось не все мои знакомые о них знали. Возможно подобная подборка окажется интересной. Буду рад обратной связи от вас в комментариях.

Начать хочу с инициализации коллекций.

Пример до 9 java:
Map<String, String> someMap = new HashMap<>();
someMap.put("someKey_1","someValue_1");
someMap.put("someKey_2","someValue_2");

Пример после 9 java:
Map<String, String> someMap = Map.of("someKey_1","someValue_1","someKey_2","someValue_2");


Возникает вопрос можно ли до 9 java "сделать все в 1 строку" например если это поле класса?

Да ))
Map<String, String> someMap = new HashMap<String, String>(){{ put("someKey_1","someValue_1"); put("someKey_2","someValue_2");
}};
Являются ли следующие четыре предложения эквивалентными?

number += 1; number = number + 1; number++; ++number;
Anonymous Poll
17%
Да
49%
Нет
3%
Не знаю ((
25%
Вопрос лучше переформулировать!
6%
В чем подвох? ))
Инициализация двойной скобкой (double brace initialisation).

В одном из прошлых постов я писал про достаточно интересную фичу Java - инициализация двойной скобкой (double brace initialisation). Мне нравится эта фича и в новых релизах Java у нее есть альтернативы. Ее часто используют в тестах для более компактной записи.

В одном из комментариев на Stackoverflow (я иногда отвечаю на вопросы со Stackoverflow для "поддержания формы") я привел пример с использованием этой фичи. Изначально вопрос был про ArrayList. Под моим ответом мне дали ссылку на комментарий от Lukas Eder, который пишет о себе: "I am the founder and CEO at Data Geekery, the company behind jOOQ.". Я не проверял его аккаунт, но похоже, что это не фейк.

Он написал интересную статью, которая заставила меня по новому взглянуть на эту конструкцию. Рекомендую почитать.

https://blog.jooq.org/dont-be-clever-the-double-curly-braces-anti-pattern/
Вышла Java 17

Поздравляю всех в выходом Java 17!!!
В этот релиз попало более 2700 закрытых задач и 14 JEP'ов.

А еще появился новый сайт https://dev.java
На сколько я понял это сайт Oracle.

Подробнее: https://habr.com/ru/post/577924/
Oracle JDK 17 No-Fee Terms and Conditions License

Oracle JDK 17 опять становится бесплатной для использования. Согласно jdk-faqs:

The NFTC is the license for Oracle JDK 17 and later releases. It permits free use for all users – even commercial and production use. There is no click through license so automating downloads of it has never been easier.


https://www.oracle.com/java/technologies/javase/jdk-faqs.html
Всегда ли нужен Hibernate?

Часто перед командами встает вопрос чем пользоваться для работы с базой и ответ не всегда очевиден. Про Hibernate написано много "рекламных" статей в которых не освящаются "подводные камни". Прочитав такие статьи и смотря на простые примеры у начинающих разработчиков может создаться ощущение что он просто прекрасен.

Рекомендую к прочтению эту замечательную статью в которой собраны наиболее интересные "подводные камни".

https://habr.com/ru/company/otus/blog/576966/
Актуален ли еще Solid?

Как это ни странно у Solid есть не только поклонники, но и противники. Роберт Мартин написал статью в ответ на критику Solid.
Я большой фанат Solid и полностью с ним согласен.

Habr опубликовал перевод его статьи.

https://habr.com/ru/post/581912/
Уроки абстракции: чему FP может научить ООП

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

Мне также понравилась сама идея "доведение абстракции до предела" и постановка вопроса "является ли преждевременная абстракция злом, как и преждевременная оптимизация?".

Суть в том, что с точки зрения оптимизации для решения с числами "оптимизированный вариант" был бы сведен к (n * (n + 1) / 2), но с точки зрения абстракции и как следствия универсальности, такое решение не подходило бы как минимум для всех типов данных.

Статья длинная, но прочитать однозначно стоит ))

https://habr.com/ru/post/587440/
The Java Version Almanac

Недавно наткнулся на замечательный ресурс созданный легендарными Java чемпионами Марком Хоффманом и Кей С. Хорстманном (Marc R. Hoffmann and Cay S. Horstmann).

Этот ресурс примечателен тем, что там собраны все ключевые полезные ссылки из мира Java (ссылка на API, спецификацию языка, спецификацию виртуальной машины и ссылки для скачивания всех версий).

Главной кил фичей я считаю их инструмент сравнения изменений между версиями Java!!!
Это просто сказка!!!

Сохраняйте ссылку в надежном месте и пользуйтесь!!! Приятного погружения!!! )))

https://javaalmanac.io
Java guru pinned «The Java Version Almanac Недавно наткнулся на замечательный ресурс созданный легендарными Java чемпионами Марком Хоффманом и Кей С. Хорстманном (Marc R. Hoffmann and Cay S. Horstmann). Этот ресурс примечателен тем, что там собраны все ключевые полезные ссылки…»
Java Troubleshooting Guide

Как оказалось не все Java разработчики знают о существовании такого замечательного руководства как Java Troubleshooting Guide от Oracle.

Я считаю, что каждый Java разработчик должен его прочитать. Особенно разделы "Troubleshoot Memory Leaks" и "Troubleshoot Performance Issues Using JFR".

По Java 17
https://docs.oracle.com/en/java/javase/17/troubleshoot/

По Java 11
https://docs.oracle.com/en/java/javase/11/troubleshoot/

По Java 8
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/toc.html
К сожалению пришлось срочно отключить комментарии. Нахлынули боты и начали спамить в комментариях. После автоматизации очистки включу обратно.
Java guru pinned «The Java Version Almanac Недавно наткнулся на замечательный ресурс созданный легендарными Java чемпионами Марком Хоффманом и Кей С. Хорстманном (Marc R. Hoffmann and Cay S. Horstmann). Этот ресурс примечателен тем, что там собраны все ключевые полезные ссылки…»
Java guru pinned «Java Troubleshooting Guide Как оказалось не все Java разработчики знают о существовании такого замечательного руководства как Java Troubleshooting Guide от Oracle. Я считаю, что каждый Java разработчик должен его прочитать. Особенно разделы "Troubleshoot…»
Illustrated TLS Connection

Думаю каждый Java разработчик сталкивался с вопросами криптографии. Как минимум времена "голого" HTTP давно прошли. Сегодня хочу с вами поделиться замечательным ресурсом на котором в очень наглядной форме описывается суть TLS 1.3.

Для перехвата пакетов и анализа трафика можно использовать Wireshark и\или tcpdump.

В Spring Boot можно добавить в конфигурацию

server.port=443
server.ssl.enabled=true
server.ssl.protocol=TLS
server.ssl.enabled-protocols=TLSv1.3

и добавить детали keystore (хранилища)

server.ssl.key-store-type=PKCS12
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=password

В реальных приложениях лучше добавлять криптографию на уровне gateway\balancer, а не Spring Boot приложения. Например ставить nginx перед приложениями.

https://tls13.ulfheim.net
NullAway: Fast Annotation-Based Null Checking for Java

Многим разработчикам в Kotlin нравятся такие фичи как null-safety и sealed-классы.

В 15 версии Java появились sealed классы и в 14 версии NPE стали более информативными, но по факту мы как и раньше ловим NPE в рантайме.

Достаточно интересное решение предлагает Uber. Это плагин NullAway для статического анализа кода для Error Prone.

Надо пробовать плагин и надеяться, что в следующих версиях Java предложат решение борьбы с NPE не хуже чем в Kotlin.
Migrating From JDK 8 to Later JDK Releases

На данный момент еще много проектов используют JDK 8 и многим только предстоит миграция на новую версию. В Java стараются по возможности сохранять обратную совместимость, но скорость изменений все нарастает и не для всех изменений это можно обеспечить.

Если вы уже столкнулись с задачей миграции или вам это только предстоит, то я рекомендую ознакомиться с документом подготовленным специалистами Oracle:

https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-7744EF96-5899-4FB2-B34E-86D49B2E89B6
👍1