Что бы вы сделали, имея на руках сказочный артефакт? Ответы могут быть разные. Кто-то захочет удивлять людей, показывая фокусы-покусы. Другим интереснее эксперимент: разрубит ли меч-кладенец яйцо дракона? Третьи попробуют сделать артефакт ещё сказочнее — чтоб скатерть-самобранка имела пять звёзд Мишлена, а сапоги-скороходы разгонялись до сверхзвука. Как показал этот сезон Java, среди обитателей Хабра есть и те, и другие, и ещё всякие разные. Написать свой сборщик? Компилировать Java в WASM? Найти хитрый пример, над которым сеньор голову сломит? Нет ничего невозможного, когда в руках перо jar-птицы. C ним, как показывает практика, можно даже национальную платёжную систему создать. Однако как ни крути, а сезон подошёл к концу, и пришло время подвести итоги. Под катом вы узнаете, кто из здешних кудесников оказался самым кудесатым и, по древнему обычаю, получит Apple MacBook Air 13 от спонсора сезона — Мир Plat.Form. А ещё — чем запомнился сезон и какие выводы можно из него сделать. Статья Автор Рейтинг (25.09.23)   Почему WebAssembly плохо годится для Java @konsoletyper 65 Делаем свою простейшую систему сборки для Java @JediPhilosopher 36 Перестаём бояться генерировать байт-код @konsoletyper 30 Разница между загрузкой и инициализацией классов в Java на любопытном примере @tsypanov 23 Новый взгляд на Maven-plugin для IDEA — GMaven @grisha9 20 Нагрузочное тестирование API без использования UI @IPavlov13 18 Поднимаем кластер PostgreSQL в Docker и Testcontainers @IvanVakhrushev 17 Ускоряем java-рефлексию в 2023 @lampa_torsherov 17 Одна из возможных версий переезда с MySQL на PostgreSQL @SimSonic 14 Параллельность в Java на практике @Jhumper 13 Байки джависта @LordNoName 11 Высокие технологии или дешевые фокусы с двойным дном @kotbajan 11 Компилирование «железного» бинарника Java-программы Google Closure Stylesheets с GraalVM @artdeco 10 Магия Spring Framework своими руками @neshkeev 9 Создание приложения для распознавания текста с изображений и аудиофайлов @vadim_samara 9 Использование Kotlin и WebFlux для выполнения задач ML в Apache Spark на GPU @Dartya 8 Как скомпилировать Spring Boot приложение в native image с помощью GraalVm и развернуть его с помощью Docker @anastasiya-asenchik 7 Динамическое создание слушателей в Kafka @valeryputnin 7 Модельно-Ориентированная Java, или Навстречу Дизайну ПО @artdeco 6 Авторизация в Spring Boot приложении с Spring Security 3.1.0 и PostgreSQL @Dm_Kaizzer 6 Релиз Jmix 2.0 — новой версии платформы для быстрой разработки бизнес-приложений на Java @haulmont 6 Исчерпывающее руководство по одномерным массивам в Java @topjava 6 Фундаментальное руководство по пакетам в Java @topjava   4 FizzBuzz и искусство фильтрации: Stream API и предикаты @Rabestro 3 Ad-hoc мониторинг: сбор, хранение и визуализация данных @akardapolov 3 FizzBuzz и искусство фильтрации @Rabestro 3  Обойдёмся без эпического зачина и первым делом объявим победителя. Им стал доблестный @konsoletyper, который залезет хоть в печь к Бабе Яге, хоть во внутренности JVM, лишь бы вернуться с годным хабраконтентом. Статья о том, почему так сложно компилировать Java-код в WebAssembly, набрала рейтинг 65 — очень неплохо для узкопрофильной статьи; в пересчёте на научпоп это 200+. За свой былинный подвиг автор, как и обещано, получает Apple MacBook Air 13 и законное место в хабралетописях. Впрочем, кто-то может заявить, что на самом деле @konsoletyper занял не первое место, а третье — и будет абсолютно прав, поскольку @konsoletyper написал две статьи и занял оба места. Нет ничего невозможного, если ты действительно любишь свой инструмент. победитель сезона Java one love На Java писать — одно удовольствие (но это могла сказаться профдеформация и парадокс Блаба). Ещё где-то рядом есть Kotlin, с которым не всё так однозначно. Например, Java всё ещё компилируется в разы быстрее. Есть задачи, где всё же Kotlin намного приятнее — это там, где нужно обильно использовать DSL. Например, на текущем месте работы у нас есть DSL для написания шейдеров прямо в Kotlin, почти как если бы мы писали на GLSL; есть DSL для описания UI почти как в Jetpack Compose, — всё это совершенно немыслимо на Java. Однако под капотом у шейдерного DSL всё равно Java — там для нужд перфоманса столько всякого, как я бы это назвал, eventual nullability и eventual mutability, что от Kotlin (особенно в сравнении с Java 17) нет вообще никаких преимуществ. Глядя на завершившийся сезон с высоты jar-птичьего полёта, нельзя не отметить разноплановость постов. Каждого автора волнуют свои аспекты Java, и благодаря этому статьи сезона могут заинтересовать самых разных читателей. Если в Java вам хочется дойти до самой сути — определённо стоит почитать обе статьи победителя сезона. Нюансы формирования байт-кода, реализация сборщика мусора своими руками из спичек и желудей и прочее и прочее. Статьи полезны не только тем, в чьи рабочие обязанности входит лезть в потроха JVM, но и простым разработчикам, желающим лучше понимать, что они делают и что вообще происходит. Более практичному, но не лишённому сумасшедшинки читателю может быть интересна статья про ML, WebFlux, Apache Spark и другие страшные слова. Миграция существующего веб-приложения на современный стек, решение ML-задач на Java вместо традиционного Python, много-много кода и конкретики. Читателю вполне прагматичному, заслуженному труженику энтерпрайза зайдут тексты про переезд с MySQL на PostgreSQL и тестирование кластеров Postgres в Testcontainers. Жизненные кейсы, практические рекомендации и даже ссылка на готовый compose-файл — тот случай, когда Хабр не только развлекает и просвещает, но и реально может решить проблему, над которой вы бьётесь прямо сейчас. Ну а если вы готовитесь к собеседованию или просто решили систематизировать знания — для вас хорошие статьи по основам. Нестатические блоки инициализации, одномерные массивы, пакеты — всё разложено по полочкам в мепьчайших подробностях. Начинающий разработчик может учиться по этим материалам, а опытный — всё равно найдёт какие-то ранее не известные ему нюансы. Java — язык общего назначения, на котором можно реализовать самые разнообразные проекты. Но лучше всего достоинства Java проявляются при создании действительно больших и сложных IT-систем. Платёжная система — это довольно сложно. Неудивительно, что люди из Мир Plat.Form многое знают и про Java, и про джавистов и не прочь поделиться своими знаниями. Если упростить: система «Мир» служит шлюзом, соединяющим банк-эмитент и банк-эквайер (а ещё — службу финансового мониторинга). Этот шлюз должен работать в реальном времени, быть отказоустойчивым; если сбой всё же произошёл — уметь после него восстанавливаться и так далее и тому подобное. Мир Plat.From (НСПК) гордится аптаймом своей системы — «пять девяток», 99,999%. Чтобы создавать такие системы, Java-разработчики должны сочетать в себе новаторство и консерватизм. Новаторство — чтобы увеличивать количество девяток, консерватизм — чтобы сохранять уже достигнутый уровень. эксперт Мир Plat.Form aka @lightstorm Любопытство, любознательность, готовность к самообучению — всё это свойственно не только джавистам, но и в целом айтишникам, да и любым, наверное, профессионалам. Что действительно характерно для джавистов — надо быть готовым прибегать к существующим решениям. Далеко не в каждой экосистеме есть такой массив накопленных знаний. Часто хочется сделать что-то новое, просто потому, что каждый художник хочет придумать что-то своё. Но в мире Java слишком многие вещи придуманы до нас — и как минимум не хуже, чем могли бы мы. Поэтому для джависта важно найти баланс между использованием коллективного опыта и применением своих уникальных навыков. Самый ценный ресурс Мир Plat.Frorm — это люди. И это не просто слова: компания действительно вкладывается в развитие своих сотрудников. ведущий разработчик Мир Plat.Form aka @Petrelevich   У нас есть внутреннее обучение, — это целый процесс, а не одиночные случайные запуски. Выстроенная система курсов по разным айтишным направлениям. Сложность курсов балансируется так, чтобы привлечь, а не отпугнуть. Специфика преподавания взрослым людям — они могут просто встать и уйти, им нельзя, как школьникам, сказать «сиди и учи».  С другой стороны, люди, которые у нас хотят обучаться, это в первую очередь люди, которые сами знают, что чего-то не знают. И идут на курсы, чтобы этот пробел закрыть. В общем-то, это первый признак, что человек мотивирован что-то изучать — осознанная работа со своим незнанием. Можно сказать, что основная цель этих курсов — тянуть вверх средний уровень знаний. Чтобы, скажем, хорошее знание Spring было нормой не только для разработчика, но и для автотестера. И чтобы сотрудники сами стремились соответствовать и тянулись вверх вместе со средним уровнем. Кстати, о знаниях: уже совсем скоро состоится конференция JokerConf, где Александр Ланцов, ведущий разработчик Мир Plat.Form, расскажет о тонкостях прогрева JVM и сравнит различные способы обеспечить быстрый старт Java-приложению. Если вы работаете с JVM и перформанс для вас не пустой звук — приходите 13 октября в 16:15 слушать Александра. Java — один из крутейших инструментов в арсенале современного разработчика. И всё же, как и любой язык, Java мертва без своих носителей. Java используют благодаря тому, что она развивается — но она и развивается благодаря тому, что её используют. Без большого и (по большей части) дружного комьюнити не было бы ни современных фич языка, ни мощных фреймворков типа Spring, ни почти двух миллионов ответов на StackOverflow. Много статей посвящено тому, как Java приносит пользу, но как принести пользу Java? Нет, для этого необязательно разрабатывать JVM или входить в комитет по стандартам языка. Нужно просто писать — банковские приложения, ML-системы, игры, сборщики, компиляторы, мануалы — что угодно. Неважно, любите ли вы показывать фокусы, вгрызаться в байт-код или решать совершенно приземлённые задачи. Главное — делать это с любовью к «родному» языку. Вот и сказочке конец, а кто слушал — молодец. Но прощаемся мы с вами не насовсем: перьев у jar-птицы ещё много, а значит, книгу хабрасказок закрывать рано. Оставайтесь с нами и ждите новых сезонов: настоящие чудеса только начинаются.