Обновить
128K+

Java *

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

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

Утечка памяти: цена одной маленькой ошибки

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

Всем привет, меня зовут Алена Коваленко, я Java-разработчица одной из команд направления Warehouse Management System (WMS) компании Lamoda. Наша команда занимается автоматизацией складской системы и реализацией новых фич для улучшения работы сотрудников склада. В том числе мы занимаемся техническими импрувментами системы, такими как вынесение из монолита функциональности, связанной с идентификацией товара и приемкой возвратов, в отдельный сервис — Inbound Service.

После релиза Inbound Service на проде склад заметил долгий отклик системы. В процессе исследования проблемы мы обнаружили утечку памяти, связанную с конфигурацией приложения, в том числе внутренних очередей в ActiveMQ Artemis.

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

Читать далее

Миграция Spring Boot приложения на Java 17 — сложный путь

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

Недавно была выпущена Java 17, и я очень рад появлению множества улучшений и новых функций. Вместо того, чтобы начинать с нового или недавнего проекта (где в этом азарт?), Мы собираемся обновить существующее приложение Spring Boot, пока мы не сможем разработать новый код с использованием Java 17.

Читать далее

Современная разработка на Java: update, фичи, API и Copilot

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

Летом этого года мы в *instinctools организовали и провели серию онлайн-дискуссий с разработчиками и экспертами в области IТ. В рамках проекта «Техпора» нам хотелось услышать разные точки зрения на события и проблемы, которые волнуют разработчиков. Одна из этих серий касалась проблем современной разработки на Java. Дискуссия оказалась настолько информативной, что мы решили собрать самые интересные моменты  и опубликовать их здесь, на «Хабре». 

В разговоре приняли участие Developer JetBrains Тагир Валеев, организатор конференции RigaDevDays, основатель латвийского JUG Дмитрий Буздин, Developer Advocate проекта GraalVM, OracleLabs Олег Шелаев и Java Developer *instinctools Денис Лешенюк. Сразу хотим сказать, что мы не задавали тон беседе и не ставили экспертов в какие-то рамки. Это был достаточно свободный разговор, который касался наиболее важных тем для разработчиков. Если вы хотите поделиться своим взглядом на обсуждаемые вопросы – пишите в комментариях.

Читать далее

Чай СБЕРгамотом: хакатон глазами участника

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

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

Рад поделиться своим опытом участия в мероприятии в качестве капитана команды "чай СБЕРгамотом".

Про хакатон

Как проверить, зависит ли Java проект от уязвимой версии Log4j

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

Если ваше приложение использует Log4j с версии 2.0-alpha1 до 2.14.1, вам следует как можно скорее выполнить обновление до последней версии (2.16.0 на момент написания этой статьи - 20 декабря).

Log4j уязвимость отслеживаться как CVE-2021-44228 (также известный как Log4Shell) позволяет злоумышленнику выполнить произвольный код в системе. 

В заметке описаны инструменты для проверки зависимости Java проекта от уязвимой версии Log4j.

Читать далее

Just Do It! Или интеграция JDI + SauceLabs – это просто

Время на прочтение5 мин
Охват и читатели1.4K
Если вы когда-либо занимались автоматизацией тестирования веб приложений, то скорее всего у вас возникал вопрос: какой же он – идеальный фреймворк? И как выбрать наиболее удобный инструмент позволяющий быстро и качественно оценить результаты работы автотестов?

Ответ прост, как и на вопрос «сколько будет дважды два?». Кто ответил «5», «7» или «2» смело продолжайте читать этот пост. А кто ответил «4» тем более может найти здесь для себя что-то полезное. В этой статье вы не увидите ни строчки кода, только мои впечатления от знакомства с JDI фреймворком и облачной платформой для запуска тестов SauceLabs. Вот она интрига, итак, поехали…
Читать дальше →

Уникальные элементы для автотестов: где они обитают и как их искать

Время на прочтение8 мин
Охват и читатели4K
Привет, Хабр! Меня зовут Вера Соколова, я Android-разработчик в команде автотестирования проекта Мой МТС.

Автотесты — очень полезная штука в разработке, так как они упрощают жизнь ручным тестировщикам. На релизе во время smoke-прогона у коллег и так очень много работы, а тут небольшая, но порой ощутимая помощь в виде автотестов, когда после запуска руками тестировщики проверяют только то, что не автоматизировано или если тесты где-то не прошли.



Но автотесты нужно еще написать и первостепенная задача — поиск элементов. Чтобы кликнуть на кнопочку, ее нужно сначала найти. С какими трудностями при этом можно столкнуться и как эти трудности преодолеть я расскажу ниже, добро пожаловать под кат!
Читать дальше →

Экономим свое время. Ускоряем создание отложенных постов в Telegram с помощью бота

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

Представьте, что вы всю жизнь собирали коллекцию фотографий кошачьих носов и в один из дней появляется стойкое желание поделиться ею с миром. Для этой цели вы решаете завести канал в Telegram и регулярно постить туда новые фотографии. Но тут вас встречает она – рутина.

Читать далее

Кэш первого уровня JPA и Hibernate

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

В этой статье я собираюсь объяснить, как работает механизм первого уровня JPA и Hibernate и как он может улучшить производительность вашего уровня доступа к данным.

В терминологии JPA кэш первого уровня называется Persistence Context, и он представлен интерфейсом EntityManager. В Hibernate кэш первого уровня представлен интерфейсом Session, который является расширением к JPA EntityManager.

Читать далее

Повышаем производительность файлового I/O в JVM на Linux

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

Все кто хоть раз касался разработки I/O интенсивных приложений, наверное, задумывался о повышении их производительности. Особенно когда у проекта много внешних хранилищ и они находятся по всему миру. Давайте разберем какие есть инструменты с их плюсами и минусами и как их лучше использовать на примере конкретного проекта, в котором принимал участие Дмитрий Бундин, старший Big Data-разработчик в Grid Dynamics.

Читать далее

Инструменты тестирования Java: 10 лучших практик написания тест-кейсов

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

О чем рассказывается в этой статье:

Станьте экспертом в разработке Java - научитесь тестировать
Почему программистам важно разбираться в Java тестировании?
Методы тестирования для Java
Почему модульное тестирование так важно?
Фреймворки модульного тестирования для Java
Как написать тест-кейс JUnit
С помощью автоматизации модульное тестирование становится лучше
Сделать тестирование Java проще и легче с помощью искусственного интеллекта
Тестирование безопасности в Java
Выводы о Java тестировании

Читать далее

Пишем простого slack-бота на Java

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

Привет! Я — Саша Казанцев, разработчик в hh.ru. В статье я расскажу, как сделать простого бота в Slack на java и немного о других вариантах использования slack api.

Слак обладает обширной и всеобъемлющей документацией и туториалами, и чтобы написать эталонного бота, лучше прочитать вообще все. Но у нас лапки, поэтому запилим по-простому. 

Структура будет интересна тем, кому лень читать лишнее: в самом начале будет инструкция по созданию бота, а после — лирика про наших.

Читать далее

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

Log4Shell/Leak4J — чрезвычайно опасная уязвимость в log4j2

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

Последние пару дней (и ночей) я изучал новую (чрезвычайно опасную) уязвимость в log4j2 под названием Log4Shell.

Это касается всех версий log4j-core от 2.0-beta9 до 2.14.1, и это очень серьезная проблема.

Эта уязвимость позволяет злоумышленнику удаленно выполнить код в вашей системе с возможностью получить полный контроль над базовыми серверами.

В заметке кратко описаны способы атаки и способы их устранения.

Читать далее

Поисковик новостей (RSS), написанный на Java + SQLite

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

Данная идея не претендует на уникальность. Суть проста - тратить как можно меньше времени на чтение интересующих Вас новостей, отсеивая ненужные заголовки. Проект делал в рамках моего обучения языку Java и SQL, начиная с 2018 года. В настоящий момент программа включена в Реестр российского ПО. Функционал продублирован в Telegram боте.

Актуальная версия программы для windows и linux находится на avandy-news.ru. Исходный код проекта будет полезно изучить тем, кто хочет создавать свои десктопные приложения на Swing (но рекомендую изучать JavaFX) или для изучения процесса работы с базой данных посредством чистого JDBC. Для улучшения дизайна интерфейса применён FlatLaf.

Читать далее

Визуализация Apache Kafka Streams с помощью Quarkus Dev UI

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

В этой статье показано, как можно визуализировать Apache Kafka Streams в реактивных приложениях с помощью пользовательского интерфейса разработчика в Quarkus (Quarkus Dev UI).

Quarkus - Java платформа, предоставляющая расширение для использования Kafka Streams API, а также позволяющая реализовывать приложения потоковой обработки, основанные непосредственно на Kafka.

Читать далее

Влезай — не убьёт! Как я попал из электромонтеров в разработчики

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

Привет! Меня зовут Иван, я бэкенд-разработчик в ЮMoney. Программистом я был не всегда: десять лет работал электромонтером. В своем первом посте расскажу, как попал в IT.

Под катом моя история и база знаний, которая помогла перейти из электриков в маленьком городе в мидл-разработчики крупной компании.

Читать историю успеха

Автоматическое создание changeSet'ов Liquibase из Java entity

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

При разработке и дальнейшей поддержки приложения база данных изменяется: добавляются, удаляются таблицы, столбцы и т.д. Для упрощения отслеживания изменений существует Liquibase. Эта библиотека, в начале запуска приложения решает, надо ли на конкретной базе выполнить конкретные скрипты, или же они в ней уже выполнены.

Каждый раз при добавление или изменение Entity, мы должны добавить новый changSet. Но что если я скажу, что есть плагин, который сам создает changeSetы на основе нашей Entity и уже существующей структуры базы данных?

Нам понадобится java, spring, gradle и liquibase plugin.

Начальные данные

Для начала нужно создать проект и пару простых Entity.

В файл build.gradle добавляем плагин:

plugins {
id 'org.liquibase.gradle' version '2.0.4'
}

Можно так же указать в переменных файл

liquibase {

activities {

main {

changeLogFile "$buildDir/generated-migrations.yaml"

url database.getProperty("dbUrl")

username database.getProperty("dbUsername")

password database.getProperty("dbPassword")

referenceUrl 'hibernate:spring:entity?dialect=org.hibernate.dialect.PostgreSQL10Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy'

logLevel 'debug'

}

runList = "main"

}

}

Читать далее

Zeebe и Camunda: сравниваем известные BPM-системы под высокими нагрузками

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

Всем привет! Меня зовут Николай Первухин, я Senior Java Developer в Райффайзенбанке. В последнее время я активно занимаюсь BPM-системами Camunda и Zeebe (основа Camunda-cloud). Если вы, как и я, с ходу не можете ответить на вопрос, кто быстрее — Camunda или Zeebe, насколько, и в каких случаях они могут тормозить, то добро пожаловать под кат.

Читать далее

ZGC | Что нового в JDK 17

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

JDK 17 был выпущен 14 сентября. Это релиз Long-Term Support (LTS), что означает, что он будет поддерживаться и получать обновления в течение многих лет. Также это первый выпуск LTS, в который включена продакшн-реди версия ZGC. Освежим вашу память: экспериментальная версия ZGC была включена в JDK 11 (предыдущий выпуск LTS), а первая продакшн-реди версия ZGC появилась в JDK 15 (выпуск не LTS).

В JDK 17 ZGC получил 41 исправление и улучшение, и я остановлюсь на некоторых из них. Но прежде чем перейти к этому, если вам интересно узнать больше о возможностях/улучшениях ZGC в предыдущих выпусках JDK, прочитайте мои прошлые сообщения.

Читать далее