javaswag
5.01K subscribers
269 photos
10 videos
1 file
985 links
Еженедельная рассылка вручную отобранных статей по Java и JVM. https://javaswag.github.io

Предложить новость: @volyx
Реклама: @anabilisa
Download Telegram
Introduction to Project Panama - Part 2: Variadic Functions
https://inside.java/2022/06/27/introduction-to-project-panama-part-2/
Во второй части статьи автор рассказывает как будет выглядеть вызов вариадичекой функции из Си. Вариадическая функция это та, у которой количество параметров и типы не указаны при объявлении. Ставим три точки в параметрах и все, можно передавать сколько угодно параметров. Например
int printf(const char * __restrict, ...); В проекте Панама для вариадических функций придуман дополнительный метод - asVariadic(...). В итоге приходится писать еще больше кода для вызова такой функции из Джавы. Автор обещает, что в будущем такой код будет генерироваться тулзой jextract автоматически.
What's a condition system and why do you want one?
http://axisofeval.blogspot.com/2011/04/whats-condition-system-and-why-do-you.html
Автор показывает как бы выглядела обработка ошибок, если блок catch разделить на две части: поимку исключения и создания стека вызова. Вместо catch используем ключевое слово handle, а вот если уже нужно создать стек вызовов используем для этого throw. Стек вызовов не всегда нужен и иногда разработчик ловит исключение, чтобы вернуть значение по умолчанию.
The difficult problem of managing Java dependencies
https://renato.athaydes.com/posts/understanding-java-dependencies.html
Разработчик Ренато смотрит на зависимости в джава проекте свежим взглядом. Представьте, что вы не знаете Джаву и хотите запустить самое простое приложение, но хотите использовать какой-то сборщик проекта как в других языках. В Мавен есть "удобный" способ сгенерировать пустой проект командой mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false.
Ну не совсем простой, допустим, вы нагуглили этот способ, не по памяти же его печатать. Эта команда сгенерировала проект. В проекте буквально одна строка кода, но мавен скачал или сгенерировал около 100 файлов - jar, xml, pom. Дальше Ренато сравнивает способы разрешения конфликтов в Мавен и Гредл и предлает новый инструмент для разрешения конфликтов JBuild.
Mitigate the relocation degradations for cache locality improvement algorithm
https://inside.java/2022/07/01/mitigate-relocation-degradations/
Пример магистерской работы студента, который ускорил сборщик мусора ZGC. Оказывается в двух шведских университетах можно поработать на JVM. Может вы знаете еще какие-то похожие программы? Пишите в комментах
How to implement switch exhaustiveness checker in Java 8?
https://medium.com/@Hixon10/how-to-implement-switch-exhaustiveness-checker-in-java-8-cbb234192206
Пример разработки обработчика аннотаций, который анализирует код и проверяет все ли енумы используются в блоке свитч. Наверняка такое есть в IDEA, в PMD, и в других плагинах, но все равно интересно, как самому реализовать такую фичу.
Спонсор выпуска: Интенсив по аргументации для руководителей от Яндекс Практикума.

Выстраивать диалог с заказчиками или коллегами из смежных департаментов бывает непросто: у них свои цели и сроки, а у вашей команды — свои. Хочется и сохранить отношения, и не откладывать все дела, засиживаясь до ночи за внезапной горящей задачей.

На интенсиве по аргументации мы расскажем, как уверенно вести рабочие встречи и дискуссии, учитывая интересы обеих сторон.

Что будет на интенсиве:
◾️ Алгоритм для быстрой подготовки к рабочим встречам: как подбирать тезисы и контраргументы, представлять свою позицию и закреплять договорённости.
◾️ Пять инструментов, чтобы мягко, но настойчиво отстаивать свои интересы.
◾️ Четыре практических воркшопа с наставниками — практикующими управленцами или тренерами из бизнеса.
◾️ Разбор ваших рабочих кейсов и персональные рекомендации.

7,5 часов вебинаров, где можно отработать навыки, и бессрочный доступ к интерактивному учебнику с теорией. Интенсив длится девять дней и стоит 15 000 ₽.
Новый поток стартует 18 августа. Записаться →
До следующего выпуска ☮️
https://javaswag.github.io/episode/31

В 31 выпуске подкаста Javaswag поговорили с Антоном Батяевым о финтехе, MBA и переходе в продукт оунера

00:01:42 В чем специфика Финтеха? Что отличает от других проектов?
00:05:15 Финансовая математика на Java
00:08:17 Терминология в финтехе - деривативы, фьючерсы, опционы, свопы, риск менеджмент
00:20:46 Типовая архитектура финтех проекта
00:31:20 Почему остался в финтехе?
00:37:33 Чем отличается инвест банкинг от трейдинговой системы
00:46:01 Для чего нужен MBA?
00:51:00 Java Oracle Certificate, Java Teacher at GeekBrains
00:57:02 Revolut. Риск менеджмент с нуля. Переход в продукт оунера
01:04:23 Метрики продукт оунера
01:09:33 Технический/Бизнес бэкграунд продукт оунера
01:20:29 Бест практисы финтеха: CI/CD/QA
01:27:12 Onboarding
01:31:09 Архитектура CQRS

Ссылки от гостя:

Сайт: batiaev.com/

Финансовая математика для финтеха - https://www.youtube.com/playlist?list=PLwjJEuRWaJcIetm_s-qvqIy2_6l3YF7Qa
Современный валютный рынок - https://habr.com/ru/company/dbtc/blog/467415/
Матчинг ордеров на Java - https://github.com/fintecy/exchange-core
Маркет дата коннекторы - https://github.com/fintecy/connectors
Миллион котировок в секунду на Java - https://www.youtube.com/watch?v=j3wFOmRmSeg
CQRS и Event Sourcing от Мартина Томпсона - https://www.youtube.com/watch?v=RlwO6CJbJjQ
Event streaming Revolut Way - https://medium.com/revolut/event-streaming-the-revolut-way-9d928005ddf7
Вакансии https://jobs.lever.co/revolut/530d3bfd-bdca-4390-8f8a-bc88ddc1eb51

Гость - https://github.com/batiaev

Кип сейф! 🖖
https://javaswag.github.io/episode/32

В 32 выпуске подкаста Javaswag поговорили с Александром Ланцовым о алготрейдинге, квант-разработчиках и Java vs C++

00:01:50 Как попал в Финтех
00:08:53 Трейдинговая платформа
00:15:18 Java vs C++, библиотека Aeron, ChronicleQueue
00:23:46 Клевые библиотеки в алготрейдинге
00:31:17 Дойч и Райф
00:37:57 Как затащить библиотеку в проект и померить количество денег
00:44:03 Про тестирование, симуляции и HDRHistorgram
00:47:07 Coordinated omission, wut?
00:51:59 Чем Джава код в трейдинге отличается от другого джава кода
00:55:28 Как померить регрессии
00:57:26 Почему протокол SBE преуспел в трейдинге?
00:59:58 Баги-баги
01:02:56 Что за лоси и что за Пи-Эн-Эл
01:06:26 Кто такой квант разработчик
01:12:09 Пригодилось ли финансовое образование
01:14:54 Финансовые модели
01:24:29 Логгинг в трейдинге
01:25:31 Планы на будущее. ГраалВМ или Джава 18

Ссылки от гостя:

Трейдинг и инвестиции с Александром Ланцовым - https://youtu.be/MU4OcFI3vok
How to design Low Latency Microservices - https://www.youtube.com/watch?v=R828U7xUggk
Микросервисы, отвечающие за несколько микросекунд — друзья и враги https://www.youtube.com/watch?v=QV-ue1YMdds
Aeron Cookbook https://aeroncookbook.com/
Центр математических финансов https://vk.com/cmf_russia
Физики и лирики в финансах https://www.youtube.com/watch?v=Hfvi17EZkvY
В зеркале супермоделей. Рассказы о моделях в финансовой экономике.
https://naukabooks.ru/knigi/katalog/v-zerkale-supermodeley-rasskazy-o-modelyakh-v-finansovoy-ekonomike-v-2-kn/
Производные Нуля: Дневник Структуратора
https://www.livelib.ru/book/1000655346-proizvodnye-nulya-dnevnik-strukturatora-vlad-goryachev

Гость - https://www.linkedin.com/in/alantsov/

Кип сейф! 🖖
https://javaswag.github.io/episode/33

В 33 выпуске подкаста Javaswag поговорили с Алексеем Генусом о архитектуре нео-банка, протоколах и представлении времени в Java
00:01:22 О себе
00:03:37 Коннектор для Петербуржской биржи
00:06:04 Протокол, пакет, запрос
00:09:34 Netty vs NIO
Кладезь знаний о Netty https://www.amazon.de/-/en/Norman-Maurer/dp/1617291471
00:17:04 Полный дизастер
00:22:21 Паттерн Батч или "Батчевание"
00:26:08 Vivid Money
00:37:44 Пишем необанк с нуля
00:43:31 Разные стэки, Go, Java, Scala
00:51:18 Скучный стэк необанка
01:00:12 Мигрируем схемы БД
Как (не) мигрировать в postgresql https://habr.com/ru/post/582698/
01:03:07 Время, что не так?
Видео, после которого вам не захочется писать велосипеды https://www.youtube.com/watch?v=-5wpm-gesOY
Сколько способов измерить время существует? Больше, чем вы думаете https://www.ucolick.org/~sla/leapsecs/timescales.html
01:09:57 Joda-time - хороший API
Как joda time попал в jdk? https://jcp.org/en/jsr/detail?id=310
Другие API для работы со временем https://www.threeten.org/threeten-extra
01:15:28 Место откуда получаем время
Нововведения в java 17 https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/InstantSource.html
Почему в spring boot нет автоконфигурации Clock? https://github.com/spring-projects/spring-boot/issues/31397
01:25:23 Сериализация и хранение в БД LocalDateTime
Проблема 2000-го года сменяется проблемой 2038-го https://en.wikipedia.org/wiki/Year_2038_problem
Реальная ситуация с проблемой 2038-го года https://mobile.twitter.com/jxxf/status/1219009308438024200
Если надо сериализовать дату-время https://en.wikipedia.org/wiki/ISO_8601
Почему не нужно использовать timestamp в postgreqsql https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29
Почему Алексей не знает, сколько дней в феврале? https://ru.wikipedia.org/wiki/30_%D1%84%D0%B5%D0%B2%D1%80%D0%B0%D0%BB%D1%8F
01:37:08 Vivid Money и время
01:42:38 Зачем придумали время?
Об истории часовых поясах во всём мире очень приятно читать у Пола Эггерта https://github.com/eggert/tz
01:46:13 java.util.Date
01:50:09 О секундах координации
Google делает это последовательно (частенько меняя правила) https://developers.google.com/time/smear
Amazon рассказывает о 2015-м https://aws.amazon.com/blogs/aws/look-before-you-leap-the-coming-leap-second-and-aws/
Bloomberg рассказывает о 2016-м https://data.bloomberglp.com/professional/sites/4/Bloomberg-Leap-Second_December-2016.pdf
Петиция от facebook https://engineering.fb.com/2022/07/25/production-engineering/its-time-to-leave-the-leap-second-in-the-past/
Часы от facebook https://engineering.fb.com/2021/08/11/open-source/time-appliance/
01:59:30 Как измерять производительность
Интересное о nanotime https://shipilev.net/blog/2014/nanotrusting-nanotime/
02:10:21 Jmh
Собственно JMH https://github.com/openjdk/jmh
О производительности JVM вообще всегда актуален https://shipilev.net/

Гость - https://www.linkedin.com/in/alexey-g-12a92333/

Кип сейф! 🖖
https://javaswag.github.io/episode/34

В 34 выпуске подкаста Javaswag поговорили с Андреем Сундуковым о переходе c PHP на Java, чистом коде и о собеседованиях

00:00:09 Инженер дата-центра
00:02:54 Из PHP в Java
00:08:16 Что хорошего в Java с точки зрения PHP
00:11:58 PHP же тоже можно писать читаемый код
00:17:15 Зачем писать чистый код
00:33:39 Clean Code 2.0
00:42:04 Простая 300 строчная функция против чистого кода
00:49:03 Договорились писать "чистый код", что дальше?
00:58:28 Спринг мотивируют писать чистый код
01:04:13 Собеседования, курс From Junior to Middle https://education.dhabits.ru/
01:07:48 Что должно быть в резюме
01:18:29 Что спрашивают Сеньоров?
01:27:04 Систем дизайн интервью
01:32:38 Канал https://t.me/developers_mind

Ссылки от гостя:
Разбор резюме на позицию Java Dev https://www.youtube.com/watch?v=nDRXq21B4PI

Гость - https://t.me/Hcd5opza9bdcjid26fg

Кип сейф! 🖖
Привет! В выпуске ожидания от Сеньор разработчиков, генерация коллизий строк и выход Джавы 19.
Mike Acton’s Expectations of Professional Software Engineers
https://adamj.eu/tech/2022/06/17/mike-actons-expectations-of-professional-software-engineers/
Майк Эктон известный в очень узких кругах разработчик игр выступил как-то на конференции с докладом "Ожидания от сеньйор разработчика". Вот, например, несколько интересных пунктов по которым вы можете проверить себя или своего коллегу:
- Я точно знаю какую проблему решаю
- Я могу объяснить эту проблему остальным
- Я могу подтвердить, что другой человек понимает решаемую проблему
- Я могу объяснить почему эта проблема важна
- Я могу объяснить сколько эта проблема займет времени и средств
- У меня есть План Б на случай если текущее решение не работает
- У меня уже реализован План Б
И там еще 40 таких пунктов. В целом лист подходит под многие ситуации.
How Valhalla Rewrites Optional
https://blog.devgenius.io/how-valhalla-rewrites-optional-a8b4008c81af
Автор изучил вопрос — что будет классом Optional после релиза проекта Valhalla? В светлом будущем будет возможно писать Optional<int> или Optional<double> — вообщем Optional от примитивных типов. Проблема в том, чтобы старый код работал по старому а новые Optional работали очевидным образом для разработчика. В итоге для для примитивных типов будет использоваться класс Optional.val, который тоже будет примитивным типом.
Fast and Simple SPSC Queue
https://puzpuzpuz.dev/fast-and-simple-spsc-queue
SPSC(Single Producer Single Consumer) очередь — это неблокирующая очередь вида один поток поставщик, один поток приемщик. Автор показывает как такую очередь можно реализовать самому. Конечно, лучше этого не делать и для продакшена взять например очередь из https://github.com/JCTools/JCTools Также автор сравнивает производительность своей реализации SPSC из JCTools и очереди ArrayBlockingQueue. Вот тут не совсем ясно, зачем сравнивать блокирующую и неблокирующую очереди, но почему бы и нет.
Building pathological input for Java HashMaps - hash collisions generator
https://www.andreinc.net/2022/09/01/patological-input-for-the-java-hash-tables
Что общего у строк "The byte representation of 'a' is: " и "The hashCode representation of 'a' is:"? Все верно у них одинаковый хэш код в Джаве - 97. Автор рассказывает как можно написать функцию, которая будет генерировать строки с одинаковыми хэш кодами. Для чего? Для того чтобы сложить их как ключи в хэшмапу и получить плохую производительность на вставку и на поиск.
Embracing Virtual Threads
https://spring.io/blog/2022/10/11/embracing-virtual-threads
В Джаве 19, которая, кстати, недавно вышла появились Виртуальные потоки в режиме превью. Разработчики Спринга готовились к ним еще со времен, когда потоки назывались файберами. Ну и как результат — чтобы начать использовать файберы нужно всего перейти на другой экзекьютор потоков. Про производительность даже Спринг не может сказать ничего внятного,говорит "надо замерять".
Java 19
https://habr.com/ru/post/689344/
Ну и если вы каким-то образом упустили все таки выход 19 Джавы то вот отличная статья с разбором "что там внутри". В основном все фичи в превью или в инкубаторе, что наверное хорошо — их можно попробовать. Изменения в АПИ можно посмотреть тут: https://javaalmanac.io/jdk/19/apidiff/18/
Java-разработчик — как архитектор Эйфелевой башни. Он создаёт сервисы и приложения, которые должны выдержать огромное количество посетителей — стриминговые сервисы, маркет-плейсы и другие. Разработчик, как архитектор, мыслит творчески: придумывать, как будет выглядеть и работать его проект. А каждая его идея отражается на пользователях.

Если вам интересно работать на стыке творчества и технологии — попробуйте java-разработку. Это можно сделать бесплатно — во вводной части курса Яндекс Практикума.

Вот что в ней будет:
— Основы языка Java: переменные, условные, выражения и циклы.
— Азы объектно-ориентированного программирования: классы, конструкторы и методы.
— Ваш первый проект на Java — приложение для учёта финансов.

Узнайте, подходит ли вам java-разработка →
До следующего выпуска ☮️
https://javaswag.github.io/episode/35

В 35 выпуске подкаста Javaswag поговорили с Алексеем Рагозиным о распределенных кэшах, сборке мусора и профилировании приложений

00:01:59 О себе
00:07:16 Сборщики мусора
00:13:25 Куда делись распределенные кэши?
00:20:14 Отказоустойчивость
00:23:14 Что с Oracle Coherence, Hazelcast, GridGain
00:27:44 Индустрия ушла в ивент стриминг
00:30:25 Ретроспектива сборщиков мусора в Джаве
00:42:13 Тюнинг сборщика мусора
00:53:15 Джава и контейнеры
01:01:06 Профилировщики
01:28:16 Сейфпонты и сисколы
01:32:36 Работы джава консультантом
01:38:43 Будущее профайлеров

Ссылки от гостя

Блог - https://blog.ragozin.info/
Эвенты - https://aragozin.timepad.ru/
Профайлер - https://github.com/aragozin/jvm-tools
Cборка мусора в Java без пауз - https://www.youtube.com/watch?v=n89CZS0u6dY
Мастер-класс по Java Mission Control - https://www.youtube.com/watch?v=wm2JNlaJJ5k
Java и Linux — особенности эксплуатации - https://www.youtube.com/watch?v=HVVsjyVxcJ8
Мастер-класс: Новые и старые возможности Java Flight Recorder в OpenJDK 11 - https://www.youtube.com/watch?v=skNOBoazKPI

Гость - https://blog.ragozin.info/

Кип сейф! 🖖
Привет! В выпуске собираем Джава проект Базелем, публикуем библиотеку в Мавен Централ и смотрим видео с конференции Devoxx UK и JPoint