Обновить
128K+

Java *

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

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

Введение в Spring Data JDBC

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

Spring Data JDBC был анонсирован в 2018 году. Целью было предоставить разработчикам более простую альтернативу JPA, продолжая при этом следовать принципам Spring Data. Подробнее узнать о мотивах, лежащих в основе проекта, вы можете в документации

В этой статье я покажу несколько примеров использования Spring Data JDBC. Здесь не будет подробного руководства, но, надеюсь, приведенной информации хватит, чтобы попробовать его самостоятельно. Очень хорошо, если вы уже знакомы со Spring Data JPA. Исходный код вы можете найти в github.

Для быстрого старта я использовал этот шаблон.

Читать далее

Практические методы оптимизации запросов в Apache Spark

Время на прочтение13 мин
Охват и читатели15K
После вводной статьи про Spark Shell мне хотелось бы рассмотреть некоторые приемы оптимизации запросов в Spark и Hive, и сравнить их с теми, что обычно применяются в классических СУБД типа Oracle или MS SQL.

Базовая модель данных


Рассмотрим разные техники на базе известной всем модели библиотеки. И так, у нас есть книги, они разложены по полкам в шкафах. Шкафы пронумерованы, если библиотека большая — то к шкафу еще прилагается и номер комнаты. Книги разложены в определенном порядке, это «физический» порядок, его можно поменять — но это сложно и долго. Даже если у нас «всего лишь» такая библиотека, как у российских императоров:


А тем более если такая, как в Тринити колледже в Дублине:


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

Как реализовать интеграцию с ЕСИА на Java без лишних проблем

Время на прочтение12 мин
Охват и читатели18K
Долгое время основным способом идентификации граждан был обычный паспорт. Ситуация изменилась, когда в 2011 году по заказу Минкомсвязи была внедрена Единая система идентификации и аутентификации (ЕСИА), ― она позволила распознавать личность человека и получать о ней данные в режиме онлайн.

Благодаря внедрению ЕСИА государственные и коммерческие организации, разработчики и владельцы онлайн-сервисов получили возможность ускорить и сделать более безопасными операции, связанные с вводом и верификацией пользовательских данных. Русфинанс Банк также решил использовать потенциал системы и при доработке сервиса по оформлению кредита онлайн (банк специализируется на автокредитовании) реализовал интеграцию с платформой.

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

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

Надеемся, наш опыт поможет Java-разработчикам (и не только) сэкономить массу времени при разработке и ознакомлении с методическими рекомендациями Минкомсвязи.

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

Когда простого пунктира мало: как подружить Java AWT Stroke и 10 приказ Минэкономразвития РФ

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

Мы тут в ИТМО занимаемся созданием всяких ГИС на заказ. И вот пришел к нам заказчик и попросил сделать демку, умеющую генерировать и отображать различные градостроительные планы и схемы и делать по ним кое-какую аналитику.

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

И вот тут-то началась засада. У каждого ЗОУИТа есть свой стиль для отображения, описанный в 10 приказе Минэкономразвития (вообще порадовало, что оказывается есть цельный отдельный приказ, где прописано все в деталях, от RGB цветов линий до названий и значений полей с данными). И стили эти все достаточно непростые.

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

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

Читать далее

Как найти что-то в тексте

Время на прочтение8 мин
Охват и читатели9.1K
Найти объект или распознать понятие в тексте — с этого начинается решение большинства NLP задач. Если вы проектируете поисковую систему, создаете голосового помощника или классифицируете пользовательские запросы, прежде всего вы должны разобрать входной текст и попытаться найти в нем именованные сущности, которые могут быть универсальными, такими как даты, страны и города, или специфичными для конкретной модели. Обратите внимание, мы сейчас говорим лишь о тех видах задач, для которых заранее известно, что именно вы ищете или что может встретиться в тексте.

image

NER (named entity recognition) компонент, то есть программный компонент для поиска именованных сущностей, должен найти в тексте объект и по возможности получить из него какую-то информацию. Пример — “Дайте мне двадцать две маски”. Числовой NER компонент находит в приведенном тексте словосочетание “двадцать две” и извлекает из этих слов числовое нормализованное значение — “22”, теперь это значение можно использовать.

NER компоненты могут базироваться на нейронных сетях или работать на основе правил и каких-либо внутренних моделях. Универсальные NER компоненты часто используют второй способ.

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

Микросервисная авторизация для чайников для чайников

Время на прочтение18 мин
Охват и читатели35K
В данной статье рассматривается пример реализации распределенной микросервисной авторизации доступа для множества пользователей к множеству ресурсов или операций. Уровень подготовки читателя может быть любой, кто знаком с программированием и проектированием. Так же рассматриваются примеры использования на практике и одна из задач реализована в виде небольшой микросервисной системы.
Читать дальше →

Ещё больше строковых оптимизаций

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

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

Читать далее

Как Spring Data Jdbc соединяет таблицы

Время на прочтение6 мин
Охват и читатели21K
В этом посте мы рассмотрим, как Spring Data Jdbc строит sql-запросы для извлечения связных сущностей.



Пост рассчитан на начинающих программистов и не содержит каких-то супер хитрых вещей.
Читать дальше →

Joker 2020: продолжение сезона онлайн-конференций

Время на прочтение7 мин
Охват и читатели3.3K
Только что, c 25 по 28 ноября 2020 года, прошла Java-конференция Joker 2020. Это уже второй сезон конференций, проводимых JUG Ru Group в формате онлайн.

В онлайн-формате конференция стала лучше или хуже? Что нового организаторами было придумано? Кого из спикеров с какими докладами можно было увидеть и услышать? Что полезного и интересного было в докладах? Имеет ли смысл посещать конференцию в следующем году?


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

Раздел «Refactor» в IDEA

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

Эта статья - краткий обзор по разделу меню "Refactor" в IDEA для начинающих.

Рассматриваются основные способы рефакторинга для Java-файлов, для большинства способов рефакторинга приведены анимированные картинки и примеры использованного кода.

Осторожно, много тяжелых gif-картинок.

Читать далее

Войти в IT после 30 через Java

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

Всем ку!

Эта статья является текстовой адаптацией одного из самых популярных интервью на youtube-канале "АйТиБорода" - интервью про Java (более полумиллиона просмотров). Если кто-то не знает, на этом канале несколько раз в месяц появляются интервью с айтишниками о технологиях, ЯП и персоналиях.

Приятного прочтения!

Читать далее

Telegram-бот на Java для самых маленьких — от старта до бесплатного размещения на heroku

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


В следующих сериях


Это первая статья в моей серии «для самых маленьких» — следующая посвящена Telegram-боту на вебхуках на Spring с блекджеком и Redis и клавиатурами. Будут ещё:)

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


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

Предыстория


Когда моя дочь начала изучать арифметику, я между делом накидал алгоритм генерации простых примеров на сложение и вычитание вида «5 + 7 =», чтобы не придумывать и не гуглить для неё задания.

И тут на глаза попалась новость, что Telegram выпустил новую версию Bot API 5.0. Ботов я раньше не писал, и потому решил попробовать поднять бота как интерфейс для своей поделки. Все примеры, которые мне удалось найти, показались либо совсем простыми (нужные мне функции не были представлены), либо очень сложными для новичка. Также мне не хватало объяснений, почему выбран тот или иной путь. В общем, написано было сразу для умных, а не для меня. Потому я решил описать свой опыт создания простого бота — надеюсь, кому-нибудь это поможет быстрее въехать в тему.
Читать дальше →

Кластеризация и классификация больших Текстовых данных с помощью машинного обучения на Java. Статья #2 — Алгоритмы

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

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



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


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

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

Книга «Система модулей Java»

Время на прочтение9 мин
Охват и читатели5.2K
image Привет, Хаброжители! Создать надежное и безопасное приложение гораздо проще, если упаковать код в аккуратные блоки. Система модулей в Java представляет собой языковой стандарт для создания таких блоков. Теперь вы можете контролировать взаимодействия различных JAR и легко обнаруживать недостающие зависимости. Фундаментальные изменения архитектуры затронули ядро Java, начиная с версии 9. Все API ядра распространяются в виде модулей, а для библиотек, фреймворков и приложений аналогичный подход можно считать хорошей практикой и рекомендацией.

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

Финальные классы в PHP, Java и других языках

Время на прочтение3 мин
Охват и читатели8.9K
Использовать финальные классы или не использовать финальные классы? Вот в чём вопрос. А ещё в том, когда и как это делать правильно.


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

Собеседование Backend-Java-разработчика: вопросы и где искать ответы. Часть 2

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

Публикую продолжение сборника вопросов-ответов с собеседований на Backend-Java-разработчика. В первой части мы прошлись по Java и Spring. А в этой поговрим о Hibernate, базах данных, паттернах и практиках разработки, об одной популярной библиотеке, поддержке и сопровождении наших приложений, а также посмотрим на альтернативные шпаргалки и подведём итоги.

Потопали

Собеседование Backend-Java-разработчика: вопросы и где искать ответы. Часть 1

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

Когда-то я проходил серию собеседований на Backend-Java-разработчика и записывал вопросы себе на будущее, чтобы потом можно было пробежаться и освежить память. Подумалось, что, вероятно, данный сборник будет полезен не только мне, поэтому сдул с него пыль, набросал ответов и делюсь с сообществом. На оригинальность и исключительность не претендую: подобные статьи уже были и на Хабре, и много где ещё — в конце (во второй части) приведу список ссылок, чтобы шпаргалка была максимально полной.


Точно установить сложность всех вопросов не берусь — на разном уровне их потребуется раскрыть с различной степенью подробности. Я написал ответы где-то на плюс-минус middle, щедро приправив ссылками для дальнейших изысканий. На самые популярные вопросы сразу перенаправляю в источники с готовыми ответами. Заодно посмотрим по ссылкам в статье, насколько Хабр может помочь в подготовке к собесам.


Текста получилось много, поэтому пришлось разбить на две части. В первой поговорим про Java и Spring, а обо всём остальном — во второй. Вторая часть тут

Погнали

Ласточка в мире микросервисов

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

Helidon – по гречески ласточка (Χελιδόνι), это такая маленькая птичка из отряда воробьиных с длинными острыми крыльями и характерным двойным хвостом. 

Уверен, каждый из нас восхищается полетом и грацией этой птички, а то, как она живет в стаях, чем-то напоминает мир микросервисов.

Helidon для нас, программистов, это набор библиотек прежде всего для разработки микросервисов, и является представителем семейства, назовем его, MicroProfile based средств разработки. Является полностью Open Source проектом, лежит на GitHub, и распространяется под лицензией Apache 2.0.

Читать далее

Lamoda x Joker 2020

Время на прочтение2 мин
Охват и читатели1.8K
Привет, Хабр! Меня зовут Влад Кошкин, я java-разработчик в Lamoda. С 25 по 28 ноября наша команда впервые примет участие в онлайн-конференции Joker 2020.

У Lamoda огромный и сложный склад: 40 000 м², миллионы товаров на полках, тысячи людей — и все это мы автоматизируем на Java через WMS (Warehouse Management System).

image

На нашем стенде мы рассказываем о том, как подружили Kotlin с бэкендом, строим модульную архитектуру, позволяем разработчикам разрабатывать, избегая лишних встреч. А еще мы будем травить байки на стенде — под катом расписание и игра-квест, где можно почувствовать себя частью команды.
Читать дальше →

Spring Security — пример REST-сервиса с авторизацией по протоколу OAuth2 через BitBucket и JWT

Время на прочтение16 мин
Охват и читатели33K
В предыдущей статье мы разработали простое защищенное веб приложение, в котором для аутентификации пользователей использовался протокол OAuth2 с Bitbucket в качестве сервера авторизации. Кому-то такая связка может показаться странной, но представьте, что мы разрабатываем CI (Continuous Integration) сервер и хотели бы иметь доступ к ресурсам пользователя в системе контроля версий. Например, по такому же принципу работает довольно известная CI платформа drone.io.

В предыдущем примере для авторизации запросов к серверу использовалась HTTP-сессия (и куки). Однако для реализации REST-сервиса данный способ авторизации не подходит, поскольку одним из требований REST архитектуры является отсутсвие состояния. В данной статье мы реализуем REST-сервис, авторизация запросов к которому будет осуществляться с помощью токена доступа (access token).
Читать дальше →