Обновить
512K+

Java *

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

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

Вопросы и ответы для собеседования по Kotlin. Часть 3

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

Zero Downtime и Spring Boot. Апдейтим базу

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

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

Сейчас же у нас есть супер-мощные инструменты для управления сервисами. Они позволяют иметь несколько разных версий сервиса одновременно. Бизнес-пользователи могут управлять тем, какую версию видит та или иная группа пользователей. Обновление и откат версии сервиса могут происходить без прерывания работы пользователей. И когда появился такой мощный и красивый молоток, все начали хотеть забивать гвозди только им. Даже те, кому это, на самом-то деле, вообще не нужно. И тут есть проблема - наличие инструмента не означает автоматической готовности сервисов для того, чтобы этот инструмент с ними можно было использовать. И если обновлять сервисы старым способом было сложно, то новым это делать еще сложнее. Давайте посмотрим, почему это так, и как вообще получить этот ваш Zero Downtime.

Читать далее

Алгоритм оценки математического выражения с использованием JavaFX

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

Как обрабатывать подобные выражения с помощью кода и графического интерфейса?

Фанатам Тьюринга точно будет интересно)

Читать далее

Пошаговый путь юриста в java-разработку

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

Предпосылки

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

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

Читать далее

Реализация gRPC с помощью Java и Spring Boot

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

Хорошо бы понимать различия между HTTP/1.1 и HTTP/2, поскольку gRPC использует HTTP/2 по умолчанию.

Характеристики HTTP/1.1:

- Текстовый формат
- Заголовки в текстовом формате
- TCP-соединение требует «трехстороннего рукопожатия» (three-way handshake) — один запрос и ответ с одним единственным TCP-соединением.

Характеристики HTTP/2:

- Бинарный формат
- Сжатие заголовков
- Управление потоком
- Мультиплексирование (одно и то же TCP-соединение может быть повторно использовано для мультиплексирования. Потоковая передача с сервера — потоковая передача от клиента — возможна двунаправленная потоковая передача)

Читать далее

Kafka Client для фреймворка Ktor

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

Мне понадобилось написать приложение на Ktor с использованием Apache Kafka и Kafka Streams. Официального клиента или плагина для Ktor'a я не нашел, а работать с ванильной Кафкой не хотелось, поэтому я как любой уважающий себя разработчик решил написать велосипед.

Читать далее

В какой сказке встречаются Баба Яга и Колобок или сказ о том как мы таск-трекер писали, часть вторая

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

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

Читать далее

Создаем eval через байт-код JVM

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

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

Читать далее

Миллиарды сообщений в минуту по протоколу TCP/IP

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

Одной из наиболее важных проблем при создании распределенных приложений является вопрос представления данных. Мы должны убедиться, что данные, отправленные компонентом «удаленному» компоненту (т. е. компоненту, который является частью другого процесса), будут получены правильно с теми же значениями. 

Это может показаться простым, но помните, что взаимодействующие компоненты могут быть написаны на совершенно разных языках. Ситуация усложняется еще больше, если учесть, что разные аппаратные/системные архитектуры, скорее всего, имеют различные способы представления «одинаковых» значений. Простого копирования байтов из одного компонента в другой недостаточно. Даже в Java, где мы можем считать себя «защищенными» от такого рода ситуаций, нет требования, чтобы две разные реализации JVM или разные версии от одного производителя использовали одно и то же внутреннее представление для объектов.

Наиболее распространенным решением этой проблемы является определение «канонического» представления данных, которое будет понятно между процессами — даже между языками программирования — и перевод данных в этот формат перед отправкой, а затем обратно в собственный формат получателя после получения. 

Существует несколько таких «форматов передачи», начиная от текстовых стандартов, таких как YAML, JSON или XML, до бинарных вариантов, таких как Protobuf, которые включают метаданные или являются полностью неструктурированными.

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

Читать далее

Ни одно задание не будет провалено: Spring Boot и Quartz в режиме cluster

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

Туториал по настройке библиотеки Quartz в режиме кластера в Spring Boot приложении с возможностью отслеживания и управления жизненным циклом задания, в том числе переносом задания в случае необходимости.

Читать далее

Зачем нам Reactive и как его готовить

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

Привет! Меня зовут Татьяна Руфанова. Сегодня мы будем понимать и принимать Reactive (Реактив). В статье расскажу, почему мы выбрали Реактив в мидл слое мобильного приложения Альфа-Банка (а у нас 300 микросервисов и треть из них реактивные), разберём, почему «нелогичное» поведение реактивной программы на самом деле очень логичное, какие сложности реактивный подход принесёт в процессе написания и исполнения кода, и как с этим бороться. А чтобы не траблшутить в проде, будем ломать тесты на Project Reactor.

Налейте чаю, включите звуки природы и настройтесь пройти все стадии принятия Reactive.

Читать далее

Как заставить Jmeter собирать скриншоты графиков после тестов

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

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

Меня зовут Илья Улизко, я занимаюсь нагрузочным тестированием ДБО ЮЛ в блоке Цифровой Трансформации «РСХБ-Интех». В этой статье я поделюсь с вами опытом автоматизации сбора графиков в Grafana при отсутствии установленного grafana-image-render плагина на сервере. Для того, чтобы научить Apache Jmeter делать скриншоты панелей в Grafana нам понадобится Selenium и Browsermob-proxy.

Читать далее

Java на стероидах, или опыт работы с Jmix

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

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

Читать далее

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

ChatGPT на Java пишет renamer для файлов

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

Мне понадобилось написать своей renamer для фото.

Зачем? Ведь есть куча бесплатного софта для пакетного переименовывания файлов. Я попробовал несколько, и в моем случае они были бесполезны, т.к. мне нужно было в качестве имени файла указывать инфу находящуюся в метаданных. А набор этих метаданных у разных форматов файлов разный (в моем случае JPG и MOV). Причем мне нужны были нужны метаданные, так как я переименовывал файлы скаченные с GooglePhoto, и у файла меняется ДатаСоздания и ДатаИзменения на текущую. И единственный способ узнать дату, когда сделано фото - это лезть в метаданные.

Я решил, что ChatGPT быстрее меня сможет найти библиотеки на java для этого, и поэтому обратился к нему. И, спойлер, он не подвёл.

Читать далее

Как перезапускать упавшие тесты параллельно

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

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

Читать далее

Сам себе экосистема: Как я адаптировал старый смартфон под современные реалии и написал клиенты нужных мне сервисов

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


Время неумолимо бежит вперед: выходят новые гаджеты, постепенно заменяя старые, превращая их в тыкву или в лучшем случае, в «тапочек» для звонков. Сейчас смартфоны стали практически одинаковы во всем: дисплей на всю площадь передней панели, почти полное отсутствие аппаратных кнопок, беспроводная зарядка… Это всё, конечно, здорово, но ведь иногда так хочется взять в руки старый, но такой необычный в наше время QWERTY-смартфон и попытаться его использовать как основной, да и цены на них могут приятно удивить: БУ девайс можно купить за несколько сотен рублей (~5-10$). Одна проблема — клиенты приложений на версии Android 1.6-2.0 безбожно устарели и давно не работают. Но иногда желание воскресить старый девайс превыше потребительского качества и тут я пришёл к мысли… а почему бы не написать с нуля свои клиенты популярных приложений? ВК с музыкой, YouTube, трекинг посылок. Так я и сел писать необходимые в повседневной жизни приложения, с нуля, на голом API Android, без каких либо фреймворков (и даже AppCompat). Получилось ли у меня это? Узнаем в статье!
Читать дальше →

Вопросы, которые я бы хотел услышать на техническом собеседовании

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

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

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

Читать далее

История учебы Васи и конечный автомат на SQL

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

После выступления на PgConf2023 у меня на выходных появилось время на реализацию идеи, как реализовать логику конечного автомата на SQL в PostgreSQL. Идея применима к любой СУБД, поддерживающей агрегатные функции, определяемые пользователем. И самое грустное, что в одной из самых популярных аналитических баз данных ClickHouse, эту задачу не нашел как вообще можно решить без Python на чистом SQL, хоть автосгенерированном.

Скоро сказка сказывается, да не скоро дело делается... Жил был Вася. Описали летописцы его житие с учебой в виде таблицы. А устои в обществе где он жил, были описаны с помощью конечного автомата. И конечный автомат мудрости - finite-state machine (FSM) был задан в виде таблицы переходов между состояниями, описанными в виде логических выражений на SQL...

Читать далее

Производительность и стабильность Knime на слабых компьютерах

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

Наступают времена, когда офисному сотруднику недостаточно знать Word и Excel в качестве минимального обязательного базиса программных продуктов. No‑code/Low‑code платформы и продукты — вот что незаметно становится обязательным для владения каждым. Эти платформы есть самый быстрый на сегодня способ без изучения языков программирования овладеть навыками использования искусственного интеллекта, машинного обучения, анализа big data, причём очень бигдата — на сотни миллионов строк.

Платформа Knime — один из таких инструментов. На первый взгляд это улучшенный Excel+BI. Но, когда посмотришь поглубже его возможности, то, очевидно — это обязательный инструмент будущего, по крайней мере для тех кто не являясь программистом хочет получить навыки как у программиста. Для простоты — Knime это «графическое» программирование. Берёшь квадратики, размещаешь в виде бизнес‑процесса, соединяешь их между собой и оп! — уже провёл анализ маркетингового плана или парсинг сайтов конкурентов или анализ рекламных текстов с помощью NLP. Или, даже строишь приборную доску управления производственного предприятия будучи простым менеджером/инженером. Или ведёшь обработку научных данных.

Knime позволяет, конечно, и код писать, причём на трёх языках Python, Java, R, но это не обязательно. Бизнес‑процессы знаешь, рисуешь? Вперёд!

Разумеется, при работе с огромными массивами данных, требования к компьютерным ресурсам возрастают. И что делать, если вам доступен простенький офисный или домашний компьютер? Или, если вы видите что аренда облачного ресурса на месяц дороже, чем купить компьютер с 64Гб оперативной памяти и процессором гоняющим Atomic Heart или Hogwartz Legacy на среднемалках?

Читать далее

Продвинутый GraphQL со Spring Boot

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

В этой статье вы узнаете, как использовать Spring for GraphQL в своем приложении Spring Boot. 

Spring for GraphQL — относительно новый проект. Версия 1.0 была выпущена несколько месяцев назад. До этого релиза нам приходилось подключать сторонние библиотеки, чтобы упростить реализацию GraphQL в приложении Spring Boot. Я уже описал два альтернативных решения в своих предыдущих статьях. В следующей статье вы узнаете о проекте GraphQL Java Kickstart. В другой статье вы увидите, как создавать более сложные запросы GraphQL с помощью библиотеки Netflix DGS.

Мы будем использовать очень похожую схему и модель сущностей, как и в этих двух статьях о Spring Boot и GraphQL.

Если вы хотите попробовать сделать это самостоятельно, вы всегда можете посмотреть на мой исходный код. Для этого вам нужно клонировать мой  репозиторий GitHub. Затем просто следуйте моим инструкциям.

Читать далее