Обновить
512K+

Java *

Объектно-ориентированный язык программирования

194,41
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Java-дайджест: начало июля

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.1K

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

В этом выпуске будет новый бесплатный (на самом деле нет) GraalVM Enterprise, отмена Java 8 в бигдате, совершенно новая система модулей (которую никто не просил, но мы её заслужили тем не менее), утилита для поиска и истребления легаси в проекте, библиотеки для работы с Large Language Models (иначе говоря, ChatGPT), всратый офис с графическим интерфейсом на Java, и многое другое. И конечно, обзор этой недели Java на Хабре.

Если есть время, оставьте комментарий, про какую часть Java-экосистемы вам хотелось бы читать дальше. Помогите Даше-путешественнице найти смысл существования. Новостей куча, поэтому пока я пишу про то, что интересно лично мне: GraalVM, Spring, Clouds, OpenJDK dev. Например, в Hibernate на каждый релиз чинят десятки каких-то багов, но я про них ничего не пишу, потому что не знаю ни одного живого человека, которому бы это было интересно.

Как всегда, статья подготовлена при поддержке "российской джавы" AxiomJDK и моего IT-бара Failover Bar, потому что я пишу её в рабочее время :)

Прекрасно. Читать далее.

Parallel Stream — не панацея или используй с умом (tutorial для начинающих)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели35K

Данная статья может быть интересна тем, кто только изучает Stream API, либо набирает практический опыт их использования. В ней раскрывается функционал, плюсы и минусы использования Parallel Stream, но не касаемся использования последовательных Stream API в целом.

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

Читать далее

Правильные тестовые данные или почему Вася Пупкин лучший друг тестировщиков?

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели20K

Будучи молодым QA-инженером, я тестировал модуль регистрации пользователя одного десктопного приложения. Набирать сочетания случайных букв в качестве тестовых имени и фамилии мне изначально не нравилось, а использование личных данных считалось некорректным, поэтому я начал использовать имена и фамилии существующих политиков. Барак Обама, Джордж Буш и другие регистрировались в сервисе кастинга голосовых актеров, проводили сессии голосовых записей, исправно платили по счетам и выполняли прочие бизнес-действия. Через некоторое время об этом узнал наш ПМ, который попросил отказаться от практики привлечения политиков в ряды наших тестовых пользователей. Передо мной встал выбор: пользоваться случайным набором букв или придумать некий шаблон. Я выбрал второй вариант. С тех пор персонаж Василий Пупкин стал моим лучшим другом.

Эта история заставила меня задуматься над критериями тестовых данных и быть более осмотрительным при их подборе. Будучи уже лидом, я часто наблюдаю картину, когда тестировщик не особо беспокоится о том, какие тестовые данные использовать в процессе ad-hoc тестирования. В этой статье предлагаю немного поразмышлять над качеством тестовых данных.

Узнать больше о правильных тестовых данных

Приручаем Liquibase. Как скормить базе данных список из 10К офисов, чтобы потом не писать костыли?

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

Привет! Меня зовут Михаил, я Java Backend Developer в Simbirsoft. В этой статье хочу поделиться своим опытом создания миграций файлов с большим списком данных при помощи Liquibase. Cтолкнувшись с такой задачей на проекте, я был сильно удивлен тому, как мало материалов написано по этой теме, даже на английском. Поэтому описал то, что удалось собрать и проверить на собственном опыте.

Читать далее

Введение в Java Process Memory Model

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели34K

Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено. Память, при этом, ресурс не бесконечный, и поэтому необходимо использовать его эффективно. Виртуальная Машина Java (Java Virtual Machine, далее JVM) умеет грамотно распоряжаться памятью и помогает нам, разработчикам, управляя ею автоматически.

О том, как именно JVM работает с памятью во время работы Java приложения мы поговорим в этой статье.

Читать далее

Автоматизированная работа с DevTools в Selenium 4

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели18K

Специалисты QA- и SDET-направлений довольно часто используют DevTools браузера, поскольку в нем есть ряд инструментов, необходимых для отладки и тестирования веб-приложений.

Например, при интеграции REST API методов с интерфейсом приложения достаточно трудоемко читать информацию по запросам и ответам в DevTools после каждого действия, а также сопоставлять это с документацией. Этот кейс можно автоматизировать, например, с помощью сравнительно новой библиотеки DevTools Selenium 4 и инструментов, которые она предоставляет.

В этой статье я — SDET-специалист SimbirSoft Мария, — расскажу про функциональности DevTools, которые были актуальны на наших проектах.

Погрузиться

Собеседования для бэкендеров: как готовиться, тренироваться и не облажаться

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели14K

Привет, Хабр! Меня зовут Гриша Скобелев, я бэкенд-разработчик, у меня есть гитара, кошка и скейтборд. Я так сильно люблю Spring Framework, что назвал кошку в честь него — Веснуша. Возглавляю программный комитет Podlodka Java Crew, где мы делаем классные конференции. Еще я организовал книжный клуб для бэкенд-разработчиков { между скобок }. Хочу поделиться своим опытом развития бэкендера — от собеседования до наработки разных навыков для роста. Тут будет много ссылок, практических советов и инструкций, которые я наработал за время своей карьеры, общения с другими бэкендерами и проведения конференций и консультаций.

Читать далее

Собеседование на Java разработчика. Разбор 1606 вопросов и ответов. Часть 2 (с 170 по 269 вопрос)

Уровень сложностиСложный
Время на прочтение102 мин
Охват и читатели48K

Всем привет! Меня зовут Владимир Баганов. Я продолжаю серию статей с простым разбором вопросов на собеседованиях на Java разработчика. Под капотом 269 разобранных вопросов из 1606 вопросов.

Читать далее

Saga и Event Sourcing с Axon. Первое знакомство

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели12K

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

Один из признанных ИТ-сообществом ответов - это, так называемый Saga паттерн. О том, что это такое, написано достаточно много, а мы займёмся его реализацией. 

Читать далее

Опыт работы с ChatGPT на примере написания Java кода для решения типовой задачи и немного выводов и рассуждений

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели8.3K

Статья о реалиях и перспективах использования ChatGPT для автоматизации написания Java кода на конкретном примере и несколько выводов и тезисов, как ChatGPT изменит рынок разработки.

Давайте разберёмся с этим :)

Использование оконных функций с Hibernate 5 и 6

Время на прочтение8 мин
Охват и читатели5.3K

SQL — это невероятно мощный язык запросов. Он предоставляет поистине безграничные возможности для извлечения и трансформирования информации. Одним из примеров этого является оконная функция. Она позволяет выполнять операции над подмножествами строк таблицы, имеющихся в вашем запросе.

Читать далее

Собеседование по Java. Разбор 1606 вопросов и ответов. Часть 1 (с 1 по 169 вопрос)

Уровень сложностиСредний
Время на прочтение127 мин
Охват и читатели224K

Всем привет! Меня зовут Владимир Баганов. Я хочу начать серию статей с простым разбором вопросов на собеседованиях на Java разработчика. Под капотом 169 разобранных вопросов из 1606 вопросов.

Читать далее

Hibernate — проблема декартова произведения при запросах с пагинацией

Уровень сложностиСложный
Время на прочтение18 мин
Охват и читатели24K

Привет! Меня зовут Артём Гордиенко, я работаю Java/Kotlin-разработчиком в Росбанке и занимаюсь разработкой микросервисов, необходимых для внешнеэкономической деятельности интернет-клиент-банка юридических лиц. Реализация этого доклада стала возможной благодаря одному-единственному сообщению, обнаруженному в логах одного нового микросервиса. Как оказалось, причина сообщения серьезно влияет на производительность приложения. Мне это показалось довольно интересным, и захотелось поделиться информацией с другими разработчиками. 

Многие сталкиваются с реализацией вывода списочных данных с пагинацией из БД. В Spring Data и в самом Hibernate есть стандартные решения, которые позволяют достаточно просто решить эту задачу. Но у предлагаемых решений есть подводные камни, и со временем или даже сразу они могут серьезно повлиять на производительность. В худшем случае — и вовсе привести к падению приложения.

В этом посте, основанном на моем докладе с JPoint 2023, я расскажу, при использовании каких стандартных решений вы столкнетесь с падением производительности и какие есть эффективные варианты реализации запросов с пагинацией. Также обсудим баги в Hibernate 6, которые я обнаружил.

Читать далее

Ближайшие события

Ваш Main() — это бомба замедленного действия: Как MOPP позволит вам избежать катастрофы в вашем коде?

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.4K

MOPP: Main-Only-Programming-Pattern

В программировании существует множество различных паттернов, которые помогают упростить и ускорить процесс написания кода. Один из таких паттернов - Main-only programming pattern (MOPP), который предлагает разработчикам поместить весь код в метод Main, который является точкой входа в приложение.

Что это такое?

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

Читать далее

Вопрос на сертификационном экзамене: применение Threads и Executors

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.2K

Продолжаем разбор вопросов из Java-сертификации от Учебного центра IBS вместе с Игорем Судакевичем, сертифицированным Java-разработчиком, уполномоченным инструктором корпорации Oracle и платформы Udemy, Java-методистом c 15-летним опытом. В этой статье мы рассмотрим применение Threads и Executors и поможем вам подготовиться к тестированию.

К задаче

Разбираемся с GraalVM, AOT и JIT

Время на прочтение8 мин
Охват и читатели22K

Если вы хотите разобраться, что такое GraalVM, как он работает, и в чем различия между Just-In-Time (JIT) компиляцией и Ahead-Of-Time (AOT) компиляцией, то это руководство — именно то, что вы искали.

Читать далее

Внутреннее обучение Java для QA

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.4K

Всем привет! В статье расскажем про внутреннюю программу обучения для QA. В наших продуктовых командах все QA-инженеры пишут автотесты, для этого мы используем связку Java+Selenium. У всех разный уровень владения инструментами и опыт программирования. Чтобы выровнять уровень владения Java в командах и помочь новым сотрудникам быстрее влиться в нашу среду автотестов, в 2022 году мы решили сделать внутреннюю программу обучения, определив минимально необходимый уровень владения технологическим стеком. В статье поговорим о том, как мы создавали нашу программу, расскажем, из чего она состоит и разберем нюансы. 

Читать далее

Нейронные сети, целый зоопарк друзей

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели7.7K

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

это моя первая статья, надеюсь не последняя - думаю станет ясно после появления первых комментариев - надеюсь я не как Джерри из "Рик и Морти", впереди есть еще идеи. В этой же статье хочу описать свой путь пройденный для некоторого погружения в изучение и последующего проведения испытаний с нейронными сетями вроде ChatGPT. Явно описывать как из России сейчас подключиться к Канаде с использованием заветных трех букв и тому подобные телодвижения смысла не вижу, так как вероятно следующие за прогрессом уже давно все это перепробовали, и убедились что да, ChatGPT ответит на ваши заветные вопросы ответом типа: я лишь реализация нейронной сети созданная для возможностей развития, и тому подобное, а позже и облегченно выдохнули, мол время еще есть не такой умный уж код она и пишет, за работу можно(или нет?) не переживать... Этой статьей я хотел сократить или перенаправить на большую продуктивность время соискателя знаний в этом направлении.

Читать далее

Скрытые ловушки десериализации Boolean: разбираем неочевидные особенности библиотеки Jackson

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели6.9K

Библиотека Jackson является мощным инструментом для сериализации и десериализации данных в формат JSON в Java-приложениях. Она предоставляет гибкую и эффективную обработку JSON-данных, позволяя преобразовывать Java-объекты в JSON-строки (сериализация) и обратно (десериализация).

Но не всегда процесс десериализации данных в библиотеке Jackson происходит очевидным образом. В этой статье я хочу разобрать несколько примеров неочевидной десериализации Boolean в библиотеке Jackson.

Ответ

Как проверить наличие обновлений зависимостей в Gradle?

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.4K

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

Именно об этом, Я и расскажу в этой статье.

Читать далее