Обновить
151.96

Java *

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

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

Оптимизация и кастомизация запросов с использованием Spring Cache и Scope Bean

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

Привет! Меня зовут Алексей Салаев, я Java-разработчик команды Corp Digital в Росбанке. В этом посте я расскажу, как можно оптимизировать и кастомизировать запросы в Spring: опишу потенциальные проблемы, оценю возможные пути решения и проиллюстрирую всё примерами.

Читать далее

Декомпозируем регулярные выражения

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

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

Но почему-то, в случае с регэкспами у программистов как будто появляется слепое пятно на чувстве стиля. Вот такая регулярка – совершенно обычное дело:

/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.]((19|20)\d\d)$/

А чо не так-то?

Синхронный «запрос-ответ» с использованием REST и Apache Kafka

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

Подружить REST и Apache Kafka кажется нетривиальной задачей. Однако с ней удалось справиться экспертам Группы «Иннотех». Ведущий разработчик Кирилл Воронин рассказал подробности решения задачи перевода асинхронных запросов в синхронные.

Читать далее

Многопоточность Java. #неОпятьАСнова #javaJunior #javaCore

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

Эта статья, как и все последующие – моя попытка структурировать полученные знания в процессе изучения Java. Здесь тезисно собрана вся основная информация по теме и те формулировки, которые показались мне наиболее удачными и понятными.
Это мой конспект, если хотите.

Статья будет полезна тем, кто изучает или повторяет основы Java Core.
И тем, кто готовится к собеседованию.

Читать далее

Первые шаги в анализе безопасности мобильных приложений: разбираемся на примере Allsafe

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

Allsafe — это приложение, намеренно спроектированное небезопасным. Для чего это нужно? Оно предназначено для обучения и поиска различных уязвимостей. В отличие от других подобных приложений для Android, оно использует современные библиотеки и технологии. Меньше похоже на CTF и больше похоже на реальное приложение. В этом посте мы разберем его уязвимости с точки зрения двух подходов: статического и динамического тестирования безопасности.

Читать далее

Как программист настроил автоматическое развертывание бекенда с базой данных

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

Всем привет, хабровчане и гости сайта

Сегодня решил рассказать о своем опыте, как я при помощи docker-compose и bash скрипта настроил развертывание бекенд приложения с базой данных.

Какая была идея? Хотелось при помощи одной команды в терминале разворачивать Java приложение с базой данных так, чтобы можно было передать все необходимые переменные в момент запуска и нигде не хранить их.
Так, чтобы можно было развернуть новую версию приложения даже с телефона, просто заранее заготовив необходимую команду.

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

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

Дело было так...

Выкуси, Telegram Premium — бот-конвертер голосовых сообщений для обхода ограничений (Java, Spring, вебхуки, ffmpeg)

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

Это третья статья в моей серии "для самых маленьких" - первая была посвящена "классическому" Telegram-боту, наследуемому от TelegramLongPollingBot, вторая - боту на вебхуках на Spring с блекджеком и ш БД Redis и клавиатурами.

Для кого написано

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

Я пытаюсь писать как для себя, а не сразу для умных — надеюсь, кому-нибудь это поможет быстрее въехать в тему.

Предыстория

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

Большинство преимуществ Telegram Premium не вызывают никаких вопросов, но запрет на отправку себе голосовых сообщений - это низко, Telegram.

К счастью, наш любимый мессенджер настолько хорош, что обойти эту несправедливость можно с помощью очень простого Voice4PremiumBot.

На дно!

Java и низкая задержка

Время на прочтение8 мин
Охват и читатели9.3K
Источник

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

Существуют методики разработки Java-приложений, которые соответствуют требованиям к производительности (или даже превосходят их) приложений, созданных на языках, традиционно применяемых для этой цели. Однако даже этого может быть недостаточно, чтобы обеспечить наилучшую производительность с точки зрения задержек. Java-приложениям по-прежнему приходится полагаться на операционную систему в вопросе предоставления доступа к оборудованию. Обычно чувствительные к задержке приложения (часто называемые «приложениями реального времени») лучше всего работают, когда имеют практически прямой доступ к оборудованию, то же самое относится и к Java. В этой статье я познакомлю вас с методиками, которые можно применять, когда мы хотим, чтобы приложения максимально эффективно задействовали системные ресурсы.
Читать дальше →

Конструктор триггеров в Telegram. Или как мы сделали простейшего, но полезного бота

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

Привет! Меня зовут Боровков Евгений и я предприниматель. В этой статье я расскажу про свой pet-проект. Или как я решил проблему вечного поиска информации прямо в уютном Телеграммчике.

Читать далее

Как я делал serverless поиск для мейлинг листов OpenJDK

Время на прочтение5 мин
Охват и читатели1K
Совсем недавно мне захотелось поискать какую-то информацию в amber-dev мейлинг листе. Оказывается, что никакого встроенного поиска тут нет. Нужно либо пользоваться гуглом и использовать site: оператор, либо использовать поиск почтового клиента. В целом, оба варианта — рабочие, но мне захотелось сделать еще одну опцию, попутно немного поиграв с WebAssembly.

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

Динамический компаратор для объектов с помощью ComparatorChain

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

И еще немного о сортировке! Рассмотрен вариант генерации компаратора для некоторой несложной сущности на основе самого класса и параметров многоступенчатой сортировки. Плюс данного подхода заключается в получении компаратора в runtime, при отсутствии необходимости менять код при изменении сортируемой сущности и параметров сортировки.

Читать далее

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

Настраиваем память JVM-приложения в Kubernetes

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

Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на  использование памяти (limits.memory), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение интерпретирует эту настройку, что порой может приводить к OOMKill.

 

Читать далее

Онлайн-фестиваль TechTrain — для тех, кто уехал, и тех, кто остался

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

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

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

Он предшествует нашей осенней серии конференций по разным направлениям (Java, JS, DevOps и так далее). И в его программе по одному докладу от этих конференций: один о видеотехнологиях, другой о мобильной разработке, третий вообще про генерацию картинок нейросетями.

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

К программе

Агрегаторы

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

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

Читать далее

История одного бага

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

Всё началось с баг репорта от одного из пользователей нашего фрэймворка JDI Light - NullPointerException при WebPage.open(), а точнее WindowsManager.getWindows()

Максимально странное падение до 30% тестов разом с одной ошибкой. Причём либо падает сразу много, либо - не падает вообще.

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

Приступить к расследованию

Безопасный Spring REST с применением Spring Security и OAuth2

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

В этой статье мы продемонстрируем пример настройки Spring Security + OAuth2  для защиты конечных точек REST API на фреймворке Spring Boot. Клиенты и учетные данные пользователей будут храниться в реляционной базе данных (для баз данных H2 и PostgreSQL подготовлены примеры конфигураций).

Читать далее

Java из Python (Kivy) и обратно на Android

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

Продолжение статьи C/C++ из Python (ctypes) на Android. Теперь поговорим о том как использовать Java из Python, ведь для android это родной язык и почти все работающие библиотеки и нужные вещи написаны на нем. Научимся создавать классы, вызывать методы, возвращать результат и дергать callback-и. На Linux аналогично работает.

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

Как хранить сеть дорог в БД для построения маршрута?

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

Японцы уже в 2018 году научили немецкий GraphHopper строить маршруты по дорогам хранящимся в PostgreSQL.

Как кастомизировать источник данных, и сохранять новые дороги в таблицу правильно?

Надо всего лишь...

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