Обновить
135.54

Java *

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

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

Как жить без IntelliJ IDEA? Часть №5. Заключение

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

Наступил конец года и вместе с ним завершается наш цикл статей. Команда Spring АйО рассмотрела некоторые последствия ухода Ultimate IDEA из РФ и как с этим теперь жить.

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

Читать далее

Барьеры и модели памяти – explained

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

Всем привет! 

Начну с предыстории.

Когда мы в Амазоне планировали переносить сервис с x86/64 на ARM, почему-то никто в нашей команде не поднял тему того, что надо уделить особое внимание работе с многопоточностью и синхронизацией, так как из-за того, что у этих двух архитектур разные модели памяти, могли случиться неожиданные проблемы.

Однако, на тот момент я тоже об этом не знал, и нам повезло, что мы изначально везде использовали модель памяти Sequential Consistency (что это – далее в статье), поэтому все прошло гладко. Теперь, зная про модели памяти и возможные последствия, боюсь представить, что было бы в противном случае.

Как родилась статья

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

Статья основана на материалах лекции Computer Science Center (CSC) с курса “Параллельные вычисления” преподавателя Калишенко Е.Л. Крайне рекомендую ознакомиться со всеми лекциями курса (более структурированного материала по теме я еще не встречал). Благо он в открытом доступе – ссылка.

Что такое барьеры памяти и зачем это все нужно?

Начнем с небольшого описания того, как устроена “условная” архитектура процессора. Почему условная? Потому что может отличаться в зависимости от конкретной реализации, но суть похожа. 

Читать далее

AI-ассистент с помощью Spring AI

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

Команда Spring АйО перевела туториал, в котором рассматриваются возможности Spring AI для интеграции с LLM.

Вы узнаете, как использовать API Function Calling для выполнения задач на естественном языке, генерировать ответы в JSON-формате и сохранять контекст диалога.

Читать далее

Создание и использование оберток (wrappers) в Java: подробный разбор

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

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

Читать далее

PVS-Studio соответствует требованиям ГОСТ Р 71207—2024 (статический анализ программного обеспечения)

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

ГОСТ Р 71207
Инструментальное средство PVS-Studio разрабатывается с учётом требований, предъявляемых к статическим анализаторам в ГОСТ Р 71207–2024, выявляет критические ошибки и может использоваться при разработке безопасного программного обеспечения. Рассмотрим функциональные возможности, реализованные в PVS-Studio на конец 2024 года в отношении анализа исходного кода программного обеспечения, написанного на компилируемых языках программирования C, C++, C#, Java.

Читать дальше →

Новые диагностические правила в PVS-Studio 7.34

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

С релизом PVS-Studio 7.34 в анализаторе появились новые диагностические правила: taint для Java, множество Unity-диагностик для C#, углубление в OWASP и многое другое! Расскажем о них в этой статье.

Читать далее

Gradle: Исправление зависимостей в один клик

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

Работаете с Gradle? Dependency Analysis Gradle Plugin помогает не только находить лишние зависимости, но и автоматически исправлять проблемы с ними.

Механизм fixDependencies переписывает скрипты сборки, чтобы они соответствовали реальной структуре проекта. Последние обновления сделали процесс анализа ещё точнее, а работу с Kotlin DSL — проще и надёжнее. Читайте про фикс зависимостей в один клик в новом переводе от команды SpringАйО.

Читать далее

Как мы делаем Java: 30 лет истории российской разработки

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

Банки, биржи, платежные системы — множество стратегически важных сервисов работает на Java. Не случайно язык, которому скоро исполнится 30 лет, уверенно держится в тройке лидеров рейтинга TIOBE. А еще Java — одна из «самых российских» технологий. Из всех разработчиков за пределами США именно россияне сделали наиболее заметный вклад в платформу — и продолжают развивать ее сейчас. Чтобы понять, как так вышло, мы вспомнили историю Java в России с девяностых годов до наших дней.

Дисклеймер: этот не историческое исследование. Текст собран из воспоминаний участников событий и инженеров, которые уже почти 30-лет заботятся о безопасности Java в России.

Читать далее

Анализ фильмов с интернет-портала Кинопоиск

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

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

Разработка включала этапы сбора, обработки, анализа и визуализации данных. Для обработки данных применялись методы очистки от пропусков и ошибок, фильтрации по ключевым показателям и трансформации структур данных. Были реализованы функции для конвертации валют, извлечения данных о жанрах и персоналиях фильмов (актёрах и режиссёрах), а также вычисления статистических показателей полноты и однородности выборки.

Для эффективной работы системы был использован современный технологический стек. Обработка данных осуществлялась с помощью MongoDB, что обеспечило хранение и управление большими объёмами неструктурированной информации. RabbitMQ организовал асинхронный обмен сообщениями между компонентами системы, а серверная часть приложения разрабатывалась на базе Spring Boot, что ускорило процесс разработки и упростило развертывание приложения. Контейнеризация с использованием Docker обеспечила удобное развертывание и масштабирование системы. Основными языками программирования стали Java 17 и Python: Java использовалась для серверной части и микросервисов, а Python — для анализа данных и построения алгоритмов обработки информации.

Для анализа данных применялись библиотеки Pandas, Seaborn и SciPy, которые обеспечили эффективную обработку данных и визуализацию результатов. В рамках анализа строились графики, отображающие популярность жанров, исследовалась корреляция оценок на Кинопоиске и IMDb, а также визуализировалась связь между бюджетами и кассовыми сборами. Для представления результатов применялись такие инструменты, как matplotlib и seaborn, позволяя визуализировать ключевые закономерности в виде графиков и диаграмм.

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

Читать далее

Новый HTTP клиент от Amplicode на Kotlin Script для Spring приложений и не только

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

Команда Amplicode решила реализовать свой собственный HTTP-клиент и пару недель назад, в последнем мажорном релизе 2024-го года, мы его выпустили! 

Сегодня я расскажу, чем наш клиент лучше HTTP-клиента от JetBrains, покажу базовые сценарии его использования, а также немного расскажу о планах на будущее. 

Статья также доступна в формате видео на YouTube, VK Видео и RUTUBE, так что можно и смотреть, и читать — как вам удобнее! 

Читать далее

Пишем скрипты и маленькие программы на Java

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

У Java есть много возможностей, благодаря которым она хорошо подходит для больших и долгих проектов. Но я обнаружил, что она на удивление неплохо справляется и с небольшими задачами. Благодаря новым возможности языка это становится ещё удобнее. Киллер-фичи — это типизация во время компиляции и отличная поддержка инструментов.

В моей работе писателя и преподавателя есть множество повторяющихся задач, например, перемещение файлов и скучное преобразование их содержимого. Берясь за автоматизацию рутины, я обычно смотрю на задачу и думаю: «Никаких проблем, напишу шелл-скрипт». А затем происходит неизбежное: с появлением новых особых случаев скрипт превращается в ужасный хаос bash-кода. И я начинаю жалеть, что не написал его на настоящем языке программирования.

«Очевидный» выбор для этой задачи — Python, но Python API не так уж чудесен, а из-за динамической типизации мне понадобится слишком много времени на отладку. Поэтому я попробовал Java. Я знаю её API назубок; по крайней мере, то, что касается коллекций, файлов, regex и так далее. Java статистически типизируемая, поэтому я защищён от глупостей ещё на ранних этапах кодинга. А её среды разработки просто потрясающие.

Что вы говорите? Действительно ли я хочу создавать отдельный файл POM и иерархию src/main/java для каждого скрипта? Хм.

Нет, я этого не делаю. К счастью, современная Java и её инструменты этого не требуют. Давайте разбираться!

Читать далее

Вся правда о @Subselect: преимущества, недостатки и альтернативы в Hibernate

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

В современных приложениях иногда возникает необходимость получать данные из сложных запросов и аннотация @Subselect в Hibernate может стать отличным решением. 

В новой статье от эксперта сообщества Spring АйО, Михаила Поливахи, вы узнаете как использовать @Subselect, какие существуют альтернативы и в чём заключаются их преимущества и недостатки.

Читать далее

Создаём CRUD REST API в Spring Boot быстро и просто вместе с Amplicode

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

Не так давно на нашем канале вышло видео, в котором Георгий Власов рассказывал, как с помощью Amplicode можно сгенерировать CRUD Rest Controller сразу со всеми необходимыми методами.  

Но создавать что-то с нуля нам приходиться не так часто, как модифицировать, улучшать и дополнять уже имеющийся код.  

Команда Amplicode это прекрасно понимает и по этой причине в нашем инструменте есть возможность создавать как отдельные CRUD методы для контроллера, так и возможность делегировать методы в контроллер из уже существующих бинов. Благодаря этим фичам разработка API становится одной из простейших и приятнейших  задач.    

Давайте посмотрим как эти фичи выглядят на практике!

Читать далее

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

Интеграция предобученных нейросетей в Java-проектах: практический пример

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

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

В данной статье я привожу практический пример интеграции с предобученной моделью, так рассмотрим задачу извлечения именованных сущностей (NER) — автоматического определения имен, мест или дат из текста. Мы будем использовать предобученную модель BERT, выполненную через библиотеку ONNX Runtime.

Вообще существует множество предобученных моделей для извлечения именованных сущностей (NER) и других задач NLP. Вот некоторые из них:

Читать далее

Система отчётов в Gatling: как работать и что включает?

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

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

После выполнения нагрузочного тестирования в Gatling генерируется HTML-отчёт, который предоставляет детальную информацию о работе системы и результатах теста. Эти отчёты позволяют глубже проанализировать производительность приложения и выявить слабые места. Давайте разберём, как с ними работать и что они включают.

Читать далее

Введение в Gatling: какие есть альтернативы и в чем их минусы?

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

Привет, Хабр! Вы когда-нибудь задумывались, насколько ваш веб-сервис способен выдержать шквал запросов? Что произойдёт, если ваши пользователи, словно зомби, хлынут на сервер тысячами? Вот тут-то и начинается история про нагрузочное тестирование, которое помогает понять, где у вашего приложения «узкие места». А инструмент, о котором мы сегодня поговорим, — Gatling. Это мощная, элегантная и, честно говоря, недооценённая альтернатива монстрам вроде JMeter, LoadRunner и k6. Но давайте разбираться по порядку.

Читать далее

Как мы обновляли продакшн до Spring Boot 3

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

В уже уходящем 2024 году мне удалось побывать на конференции JPoint, которая проходила в апреле. В числе прочего там активно обсуждалась тема обновления проектов на Spring Boot 3. Однако из тех, кого мне удалось послушать, и с кем пообщаться, ни у кого не было реального опыта такого обновления. Опасения в первую очередь были связаны с Hibernate 6, который сильно изменился по сравнению с предыдущей пятой версией.

Как я уже позже выяснил на собственном опыте, опасались не зря. Именно из-за изменений в поведении Hibernate мы получили аварию на проде: наша база начала грузить CPU под 100%. Это была самая серьёзная, но далеко не единственная проблема, с которой пришлось столкнуться. Далее опишу в деталях, что, как делали и какие проблемы поймали.

Читать далее

Поиск потенциальных уязвимостей в коде, часть 1: теория

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

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

Читать далее

Открытая IDE для российских разработчиков

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

Компания Haulmont совместно с Группой Астра и Axiom JDK создает некоммерческое партнерство для развития открытой российской среды разработки – OpenIDE.

Все три компании имеют огромный опыт в создании популярных продуктов для разработчиков и мы верим, что сможем сделать качественный продукт. Мы не планируем изобретать велосипед и будем использовать в качестве основы популярную среду с открытым кодом IntelliJ IDEA Community Edition.

Почему это хорошая новость для российских разработчиков? Чем это отличается от самой IntelliJ IDEA CE или уже существующей российской GigaIDE? Какие языки будут поддерживаться? Что со Spring? Когда релиз? Читайте под катом.

Читать далее

Как жить без IntelliJ IDEA? Часть №4. Database Client

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

В новой статье из цикла «Как жить без IntelliJ IDEA» команда Spring АйО изучила альтернативы DB‑клиенту от JetBrains, входящему в состав Ultimate и полюбившемуся многим разработчикам.

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

Читать далее

Вклад авторов