Обновить
181.69

Java *

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

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

Мечтают ли Андроиды о нейропроцессорных модулях? Перенос модели TensorFlow Lite в мобильное приложение

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

Несмотря на то, что искусственный интеллект – наиболее хайповая тема в современных ИТ, и учитывая тот факт, что предыдущая мега-история с Internet of Things и Edge Computing до сих пор не забылась, я удивился, что отсутствуют внятные обучалки типа «Hello world» по добавлению machine learning в мобильные приложения на Android. Ну они конечно есть, только совсем не начального уровня. Кроме того, в них предлагается использовать чужие модели для распознавания кошек от собак и рукописных букв в текст итд. Но вот чтобы взять регрессию и с ней поработать – нет (или я не нашел). И в книгах не нашел. Если есть – поделитесь. Ну а пока я буду добавлять свою модель в приложение и параллельно писать этот текст.

История моего приложения есть в публикациях 1, 2, 3. Если коротко, это программа RuLearn для запоминания лексики в иностранных языках или в любой другой области, которая требует механического заучивания. Ее эффективность определяется «кривой забывания» Эббингауза, но как выясняется, интервалы для повторения хорошо было бы адаптировать под сложность изучаемого материала. То есть обучающийся учит новые слова, а приложение учится на его ошибках и подстраивает алгоритмы повторения оптимальным образом. Напрашивается машинное обучение в обучении человека.

Современные ARM-процессоры в мобильных телефонах содержат NPU для работы с нейросетями. Возможно, до сих пор это наименее используемая часть аппаратного обеспечения в вашем мобильнике. Поэтому никакая клиент-серверная архитектура в данном случае не нужна, в финале нашей разработки машинное обучение будет идти на конечном устройстве (бонус - никто с серверной стороны не сможет посмеяться над ошибками пользователя). Но на промежуточном этапе придется использовать модель, созданную на десктопе. Сегодня этим и займемся.

Читать далее

Новое событие в JFR для диагностики использования устаревшего (deprecated) кода

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

В Java есть специальная аннотация @Deprecated для маркировки уставшего кода. С определенной периодичностью такой код из JDK удаляется. Обычно о конкретных сроках удаления анонс делается заранее и в теории можно успеть подготовиться, но на практике не все так просто.

В больших проектах найти куски устаревшего кода в куче зависимостей задача не тривиальная и требующая хорошей автоматизации. В этой ситуации к нам приходит на помощь новый тип события в JFR. Он был добавлен в JDK 22.

Давайте посмотрим на простом примере как это работает.

Посмотрим...

Запускаем таски по расписанию: когда важна высокая частота, а креши дорого стоят

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

Всем привет! Я Илья, бэкенд-разработчик в Яндекс Телемосте — сервисе для организации видеовстреч и онлайн-трансляций.  

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

Читать далее

Создание микросервисов на Java с Dropwizard

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

Dropwizard — это комплексный фреймворк, созданный с целью упростить разработку RESTful веб‑сервисов, объединяя в себе множество проверенных временем библиотек и инструментов.

Читать далее

Spring Boot 3.3: повышение производительности, безопасности и  observability

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

Команда Spring АйО продолжает следить за выходом новых версий популярных технологий. В новом переводе рассказали про основные улучшения, которые вошли в состав Spring Boot 3.3. Среди них:

Поддержка Class Data Sharing (CDS)

Улучшение производительности виртуальных потоков для web-сокетов

Новые свойства для настройки Spring Data JDBC, GraphQL websocket, WebFlux и Tomcat

Читать далее

Не используйте Lombok с JPA, пока не прочтете эту статью

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

Lombok — действительно отличный инструмент. Одна строчка кода, и все ваши JPA сущности перестают корректно работать ;) Но это только в том случае, если вы не знаете, какие фичи Lombok можно использовать вместе с JPA, а какие лучше не стоит. 

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

Читать далее

Как заставить code coverage работать на вас

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

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

Читать далее

Нагрузочное тестирование в разработке веб-приложений

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

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

Читать далее

Правда ли, что Dubbo — это как gRPC, но из Китая?

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

Всем привет! На связи Максим Чудновский и Александр Козлов, мы занимаемся развитием интеграционной платформы Synapse. Это сloud-native децентрализованная платформа для интеграции и оркестрации микросервисов, которая разрабатывается в СберТехе.

Сегодня есть множество протоколов, обеспечивающих эффективную коммуникацию между различными компонентами приложений и систем. Два ярких представителя таких технологий — Dubbo и gRPC, которые, по мнению некоторых экспертов, имеют поразительное сходство. Но действительно ли они так уж похожи?

Мы подготовили два материала на тему интеграционных фреймворков. В этой статье познакомим вас с Dubbo, вспомним про базовое устройство Service Mesh и покажем, как мы на Java обычно решаем вопросы интеграции в наших системах. Во второй статье соберём демоприложение на базе фреймворка Dubbo.

Читать далее

Забытая история Java: версия Патрика Ноутона

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

Патрик Ноутон — первоклассный специалист из Sun Microsystems, являющийся одним из создателей Star7 и Java.

Именно он был инициатором запуска проекта (причём через конфликт с руководством Sun и критику их работы, находясь на грани увольнения), который привел к появлению Java.

Если бы Патрику позволили уволиться и перейти в NeXT, возглавляемую Стивом Джобсом, как он того хотел, то языка Java, не существовало бы.

Данный текст, опубликованный им 18 марта 1996 г., позволяет взглянуть в прошлое на “лихие” 90-е, когда Sun пыталась оседлать перспективные направления, связанные с компьютерами, сетями и сопутствующими технологиями.

Но Патрика не запомнят, как одного из компьютерных гениев, работавших в Sun над Java. А все потому, что на пике своей карьеры в возрасте 34 лет в конце 1999 г. он потеряет всё: семью, престижную работу, бо́льшую часть состояния и репутацию. Причиной тому будет поимка его ФБР и обвинение в педофилии.

Но до этого переломного события еще около трех лет; успех и востребованность начинают кружить голову и кажется, что вся жизнь впереди…

Узнать темное прошлое Java

JPA Entity. Загрузи меня не полностью

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

JPA часто подвергается критике за невозможность загружать сущности частично, что на самом деле является большим заблуждением. Spring Data JPA и Hibernate включают в себя множество инструментов по частичной загрузке сущностей. 

Команда Spring АйО подготовила статью, в которой рассмотрела имеющиеся в Spring Data JPA инструменты для частичной загрузки сущностей, а также разобрала их особенности и corner-кейсы.

Читать далее

Как сделать анализатор кода за два дня

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

Статический анализ — это очень мощный инструмент, позволяющий следить за качеством кода. Предлагаем вместе попробовать написать простой Lua анализатор на Java, чтобы понять, как устроены статические анализаторы кода внутри.

Читать далее

Бинарные деревья — решение алгоритмических задач, часть 1

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

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

Немного теории для общего понимания сути.

Бинарное дерево - это иерархические структура данных, в которой каждый узел имеет не более двух дочерних узлов. Узлы обычно называются правыми и левыми потомками. При этом каждый из потомков, в свою очередь тоже является узлом, который может иметь двух потомков. Если у узла нет потомков, такой узел называют листом.

Кстати, у меня есть телеграм-канал, где пишу подходы к решениям всяких задачек с LeetCode, там больше разборов конкретных задач, чем здесь, потому что не всегда нужна статья. В общем, если интересно - жду здесь - t.me/crushiteasy :)

Читать далее

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

Полезные фичи в Java для новичков: мой список

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

Привет, Хабр!

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

Сегодня я хочу рассказать вам о четырех фичах в Java, которые сам активно использовал в своих проектах и которые, на мой взгляд, заслуживают внимания. Да, это мой личный список, и я не претендую на то, что эти фичи новы или являются последним писком моды. Однако, по моему опыту, они действительно могут упростить жизнь.

И знаете, что самое приятное? Когда коллеги начинают говорить: "А почему я об этом не знал раньше?"

Читать далее

И опыт, сын ошибок трудных: обрабатываем ошибки в Spring Boot

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

Долгое время разрабатывая микросервисы в разных командах, я сталкивался с типовой задачей: созданием максимально информативного ответа на запрос, когда произошла какая-то ошибка. Особенно это актуально для систем с пользовательским фронтендом, большим количеством интеграций или систем, которые представляют свой API как продукт. Во многих случаях это решалось выдачей сообщения «Ошибка системы» с HTTP-кодом 500. Из раза в раз меня не покидало ощущение, что решению этой задачи не уделяется должного внимания и времени. В текущем проекте нам пришлось пройти все круги ада, изменить несколько подходов и реализаций. И здесь я постарался описать, как это было, и сформулировать выводы, которые мы сделали на каждом шаге решения проблемы.

Читать далее

Даже математики ошибаются

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

Мы знаем, что математика — наука точная. Значит ли это, что GeoGebra — программное обеспечение для интерактивного изучения математики — столь же точно? Проанализируем же исходный код проекта с помощью PVS-Studio!

Читать далее

Java Digest #15

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

Всем привет! 👋 👋 👋 👋

Мы Java-разработчики Т-Банка: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

В этом выпуске у нас много материалов, посвященных развитию Java. Коснемся и Leyden, и Valhalla, и Loom, и GC в JDK 23. За прошедший месяц вышло много интересных докладов с последнего JPoint, некоторые из них мы осветили в этом выпуске. А в разделе со статьями собрали много туториалов и обзоров. Dev-контейнеры от JetBrains, реализация Transactional Outbox с использованием Spring Boot, отслеживание вызова Deprecated-методов, история сбоя в Netflix, связанного с виртуальными тредами, — вот далеко не полный список. И на сладкое — пара свежих выпусков подкастов JavaHut и javaswag. Приятного чтения 😉

Читать выпуск 15

Что нового в Amplicode 2024.2

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

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

* Gutter Icons для Spring-объектов

* Улучшенная генерация Spring Web тестов

* Поддержка Extends и Include в Docker Compose

* Генерация отдельных HTTP-методов для REST-контроллеров

* Поддержка Kubernetes и Helm

Подробнее о каждом из нововведений рассказали в статье.

Читать далее

Состояние Spring в 2024 году

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

Команда Spring АйО перевела важнейший документ для Spring-разработчиков!

В начале июня компания VMWare, владеющая Spring, опубликовала результаты исследования, в котором приняло учатие более 1,500 разработчиков по всему миру. Отчёт получился действительно интересным и всеобъемлющим. Были рассмотрены как базовые темы, такие как выбор архитектурных подходов и типов API, так и продвинутые, такие как компиляция в Native Image и использование Spring вместе с Kubernetes.

Читать далее

Портируем ML модели на Java с помощью ONNX

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

Всем привет, меня зовут Евгений Мунин. Я Senior ML Engineer в Ad Tech, а точнее в программатик платформе по доставке Web рекламы.

Сегодня речь пойдет про то, как сделать ML модели, совместимыми с бэк э

Читать далее

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