Обновить
160.58

Java *

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

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

Ещё раз про умный дом

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

Представляю программно-аппаратный проект: локальную сеть умный дом с акцентом на режим охраны. В качестве управляющего устройства используется сотовый телефон с ОС Android версией не ниже 5.0. Через кабель USB телефон подключен к устройству USB/RS485. Для питания всей системы используется блок бесперебойного питания . Узлы управления сбором информации от датчиков и управления исполнительными устройствами реализованы на микросхемах ESP 32. Обмен информацией и питание внешних устройств производится через сетевой кабель. Управляющее устройство (телефон) периодически опрашивает узлы сети и если есть информация от датчиков, в зависимости от настроек, передает сообщения либо в виде SMS, либо в TELEGRAM. А если получена SMS – команда она передается для исполнения на ВУ. Также возможна автономная работа по заложенным сценариям.

Читать далее

DDD, HEXAGON, HIBERNATE, не считая JOOQ. Часть 1

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

Статья написана для java разработчиков, создающих системы со сложной предметной областью. Система, как правило, представлена сетью микросервисов или модульным монолитом. В рамках такой системы обычно содержится большое количество сущностей (JPA/JOOQ), которые одновременно используют как технические, так и бизнес-сущности. Смена технологической базы по прошествии нескольких лет разработки для такой системы является очень дорогостоящим решением. Доработки бизнес-функционала занимают большое количество времени.

В первой части статьи проведем теоретический обзор основных терминов и паттернов гексагональной архитектуры и Domain Driven Design или сокращенно DDD.

Какие проблемы вы сможете решить, прочитав статью

Вероятно,

Читать далее

Форматирование милли/микро/нано секунд в java.sql.Timestamp

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

В JVM 1.8 отсутствует удобный и простой в использовании класс форматирования класса java.sql.Timestamp с микро и нано секундами. Есть специализированный пакет java.time с достаточно разнообразной функциональностью. Но его использование для преобразования типа java.sql.Timestamp в строку и из строки в тип выглядит как то сложновато. Хотелось иметь простой способ преобразования с функциональностью класса java.text.SimpleDateFormat.

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

Хочешь, не хочешь, но надо все же писать полностью свой класс, но писать то все с нуля не хочется. И тут мне в голову пришла идея, раз нельзя наследоваться от класса java.text.SimpleDateFormat, но использовать то его можно же. Идея реализации простая, форматировать и разбирать милли/микро/нано секунды отдельно. Сказано, сделано.

Читать далее

Datafaker: альтернатива использованию производственных данных

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

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

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

Datafaker — это библиотека для JVM, предназначенная для генерации фиктивных данных, похожих на производственные данные. 

Эти данные могут быть сгенерированы как часть ваших модульных тестов или могут быть сгенерированы в виде внешних файлов, таких как файлы CSV или JSON, чтобы они могли служить в качестве входных данных для других систем. 

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

Читать далее

Мясная аналитика на СlickHouse

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

У нас в hh.ru есть три кластера PostgreSQL, два кластера Cassandra, кластер Hadoop и пять кластеров ClickHouse. Не то чтобы всё это было жизненно необходимо в разработке, но если уж начал собирать серьезную коллекцию, к делу надо подходить серьезно. 

В этой статье расскажу, как нам удалось запилить конкретную бизнес-фичу с применением ClickHouse и на какие подводные камни при этом наткнулись. Щас будет мясо!

Читать далее

Попробуй пройди за 4 часа тестовое задание в канадскую компанию

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

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

Читать далее

Хранимые процедуры, функции и триггеры на Java

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

Всем привет! Сегодня мы расскажем о полезной возможности СУБД Ред База Данных - создании внешних подпрограмм, то есть процедур, функций и триггеров на языке Java. Например, язык PSQL не позволяет работать с объектами файловой системы или сети, а Java запросто решает такие задачи и существенно расширяет возможности встроенного языка.

Читать далее

Пишем приложение на Mi Band 7 с сервисной частью

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

Недавно я купил себе Mi band 7, по началу хотел купить 6-ую версию, пока не узнал, что на 7-ой обновилась операционная система и теперь она поддерживает установку приложений. Да, официально они об этом не заявили, но умельцы уже сделали множество приложений. Они ставят их как циферблаты, и это вполне обычные приложения. Но все эти приложения работают только локально на самом MiBand 7, не имея возможности взаимодействовать ни с телефоном, ни с интернетом. Я углубился в байткод приложения и документации по ZeppOS чтобы найти способ создавать приложения, взаимодействующие с интернетом, в этой статье я опишу свой путь. В итоге у меня получилось сделать запрос в интернет с часов и даже запустить мост для отладки приложений. 

Читать далее

Создание очередей с низкой задержкой размером в терабайт

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

Очереди часто являются фундаментальными компонентами в паттернах проектирования программного обеспечения.

Но что, если каждую секунду поступают миллионы сообщений, а многопроцессорные потребители должны иметь возможность читать полный журнал всех сообщений?

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

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

Читать далее

Представление Project Loom в Java

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

Это руководство поможет вам понять, что представляет собой Project Loom в Java и как его виртуальные потоки (также называемые «fibers») работают «под капотом».

Читать далее

Параллелизм, асинхронность, многопоточность – Reactor почти всё сделает за Вас

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

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

В качестве примера, предлагаю рассмотреть реализацию сервис индексации данных в ElasticSearch. Данные хранятся в MongoDB, ключевые атрибуты которых синхронизируются с ElasticSearch (функционально похоже на Logstash). В проекте используется стек: Java/Spring Boot/Reactor/WebFlux/WebClient/RabbitMQ/MongoDB. На выбор RabbitMQ и MongoDB повлияло, в том числе, наличие реактивных драйверов.

Читать далее

Обзор уязвимости CVE-2022-42889: выполнение произвольного кода в Apache Commons Text (Text4Shell)

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

Прежде всего, давайте проясним, что это НЕ новая уязвимость Log4Shell или Spring4Shell.

Хотя это проблема удаленного выполнения кода, ее последствия не столь серьезны и не так легко эксплуатируются, как проблема в Log4j от декабря 2021 года.

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

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

На самом деле эта проблема очень похожа на CVE-2022-33980, о которой мы писали в начале этого года.

Читать далее

Spring. Экспертное мнение о плюсах и минусах самого популярного Java-фреймворка

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

Spring является самым популярным инструментом при разработке промышленных приложений на Java — от больших монолитных приложений до микросервисов. Сразу стоит отметить, что под термином Spring мы понимаем не столько Spring Framework, сколько экосистему и Spring Boot. Всё, что позволяет нам «легко и непринужденно» использовать самые распространенные библиотеки из мира Java, зачастую даже не разбираясь в их настройках (всё настроено уже за нас).

Мы попросили Ильназа Гильязова, Java-разработчика с большим опытом, разобрать ключевые плюсы, минусы, проблемы и риски использования Spring, а также возможные альтернативы.

Читать далее

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

От OSB до Serverless

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

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

Если коротко, то это история о том, как я попытался сохранить выращенный урожай при помощи подручных средств: ОСП, утеплителя, ESP8266, керамического рептилического нагревателя и сервисов Yandex.Cloud. Успешно ли — покажет только весна.

Читать далее

Reverse-инжиниринг “чёрного ящика”: зачем поддержке исходный код?

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

Всем привет! Мы команда сопровождения GlowByte, занимаемся решением багов в различных системах крупного бизнеса. В статье на примере use-кейса расскажем, как разбирать закрытую систему по кусочкам в поисках решений сложных багов.

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

Читать

5 лучших книг по Java для новичков и профи, на которые стоит обратить внимание в 2022 году

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

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

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

Читать далее

Telegram Bot на службе у автоматизации тестирования. Или как, попивая чай с плюшками, запускать автотесты с телефона

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

В этой статье я поделюсь своим опытом создания Telegram Bot-а для автоматизации тестирования.

Читать далее

API Токийской фондовой биржи Jquants

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

Недавно вышедшая бета-версия jquants-api позволяет получать массивы суточных финансовых данных от более чем четырёх тысяч компаний, представленных на Токийской фондовой бирже.

На данный момент через API доступны следующие массивы данных:


В будущем добавятся новые массивы данных.

Хотя текущие исторические данные доступны только начиная с 2017 года, поощряется отправка пользователями отзывов об API через обычные каналы github (и т. п.), чтобы разработчики могли подробнее понять особенности его использования.

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

3 трюка для устранения странных ошибок с дженериками

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

Вы знаете о системе PECS? Знаете ли вы о типах пересечений? Знаете ли вы, где используется создание дженерик массивов?

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

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

Читать далее

Структуры данных Java #неОпятьАСнова #javaJunior

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

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

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

Читать далее

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