Как стать автором
Обновить
157.29

Java *

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

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

Расширение PVS-Studio для Visual Studio Code: поиск ошибок в Java-коде

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

Java-разработчик и предпочитаешь работать в VS Code? Для тебя есть хорошая новость! Теперь ты можешь писать ещё более надёжный код вместе с расширением PVS-Studio, которое помогает находить ошибки в Java-проектах и не только.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии11

MyBatis «на минималках»

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

Привет, Хабр! Меня зовут Пётр Гусаров, я Java‑программист в CDEK. В этой статье расскажу про не очень распространённый фреймворк MyBatis.

Почему MyBatis? Потому что мы в CDEK используем его в большинстве проектов, и в деле он весьма неплохо себя показал. Немного сложен и непривычен на этапе входа, но все эти минусы перекрываются его гибкостью. «Да есть Hibernate, Jooq, JDBC и еще что‑то», — скажут бывалые. Есть, но в данной статье речь пойдёт о MyBatis.

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

Читать далее
Всего голосов 54: ↑53 и ↓1+52
Комментарии23

Java Digest #9

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

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

Читать девятый выпуск
Всего голосов 14: ↑14 и ↓0+14
Комментарии1

Копаемся в встроенном приложении камеры старого Xiaomi. Часть 1

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

Попытаемся портировать встроенные фильтры камеры Xiaomi Mi A1 на новенький Redmi Note 12 с восьмой попытки

[К первой попытке!]
Всего голосов 46: ↑46 и ↓0+46
Комментарии15

Истории

Плагин для анализа планов PostgreSQL в Eclipse и DBeaver, и его разработка

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

Для пользователей explain.tensor.ru - нашего сервиса визуализации PostgreSQL-планов, в дополнение к плагину Jetbrains мы создали еще один - с возможностью форматировать запросы и анализировать планы в Eclipse IDE и DBeaver.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии11

Разбираемся с MavenGate, новой атакой на цепочку поставок для Java и Android-приложений

Время на прочтение11 мин
Количество просмотров5K

Всем привет!

Сегодня с вами Юрий Шабалин, генеральный директор «Стингрей Технолоджиз», и я хотел бы разобрать в этой статье новый тип атаки на цепочку поставок под названием «MavenGate».

А что в ней, собственно, такого? Ну хотя бы то, что ей подвержены более 18% всех Java-библиотек, соответственно, для Android это применимо в полной мере. Совершить эту атаку безумно просто. Суть ее основана на логике работы сборщиков Java/Android-проектов и разрозненности репозиториев, которые хранят эти библиотеки.

Если стало интересно и хочется проверить, уязвимы ли вы, добро пожаловать под кат!

Читать далее
Всего голосов 22: ↑22 и ↓0+22
Комментарии16

Framework для автоматизации тестирования на Java

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров5.2K

Привет, Хабр! В нашем сегодняшнем материале тестировщики Максим Жигарев и Артем Сенько из Блока ИТ‑развития инвестиционного бизнеса РСХБ‑Интех расскажут, как они автоматизировали тестирование в ИнвестБлоке с использованием Java. Материал основан на докладе, с которым Артем и Максим выступили в рамках внутреннего митапа для сотрудников РСХБ.

Читать далее
Всего голосов 21: ↑19 и ↓2+17
Комментарии6

DataMaps. Рассказ о нашей ORM на Kotlin

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

Уже несколько лет мы с командой трудимся над платформой, которая официально называется БФТ.Платформа, а менее официально - Ice. В основном наша платформа используется в органах власти и государственных учреждениях.
Сегодня хотелось бы рассказать не обо всей платформе, а только об одном из ее компонентов - ORM (object-relational mapping) - фреймворке DataMaps.

Данная статья не инструкция или справка. Это достаточно поверхностный обзор, цель которого — получить первичную обратную связь: интересен ли наш фреймворк сообществу?

Внутри БФТ-Холдинга Datamaps зарекомендовали с одной стороны, как легкий, наглядный и понятный для разработчиков фреймворк, с другой стороны, мощный по своим возможностям.

Ознакомиться
Всего голосов 16: ↑15 и ↓1+14
Комментарии19

Туториал по нотификациям через RSocket: от концепции до запуска в продакшн

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров3.3K

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

После анализа различных вариантов, мы остановились на WebSocket в связке с RSocket.

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

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

Поэтому, когда мы закончили проект, то решили восполнить (или попытаться) этот пробел в русскоязычной среде на реальном примере. Надеемся, что эта статья поможет вам разобраться в применении RSocket over WebSocket и сократит время на погружение :) 

Читать далее
Всего голосов 21: ↑21 и ↓0+21
Комментарии2

Как загружать классы в Java 8 и Java 9+?

Уровень сложностиСложный
Время на прочтение24 мин
Количество просмотров6.3K

Привет, Хабр! Я разработчик в Институте Системного Программирования РАН, занимаюсь разработкой статического анализатора Svace. Недавно я столкнулся с задачей самостоятельной загрузки классов в JVM, что оказалось непросто, потому что в проекте мы используем модули Java.

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

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии0

Java ScopedValue: Ускоренный ThreadLocal

Время на прочтение12 мин
Количество просмотров3.4K

В инкубаторе JEP-429 появилась новая альтернатива ThreadLocal под названием ScopedValue (в значительной степени как поддержка и развитие Virtual Threads). ScopedValue предназначен для того, чтобы предоставить более легкую альтернативу ThreadLocal, которая хорошо работает с виртуальными потоками, а также решает многочисленные недостатки, присущие API своего аналога двадцатипятилетней давности. В этой статье мы рассмотрим основные отличия ScopedValue, и за счет чего он может работать быстрее.

Читать далее
Всего голосов 15: ↑13 и ↓2+11
Комментарии2

CompletableFuture. Глубокое погружение

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

java.util.concurrent.CompletableFuture - класс не новый. Он предстал перед нами во всём своём величии в 2014-м году вместе с выпуском Java 8. Много лет с тех пор прошло, а проще он не стал.

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

Читать далее
Всего голосов 36: ↑36 и ↓0+36
Комментарии27

Project Valhalla: эпичный квест Java за перфомансом

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

Java продолжает наносить ответные удары. В Java 21 релизнулись виртуальные потоки. Теперь есть надежда, что в ближайших версиях двинется к релизу старый и очень ожидаемый JEP-401 aka Project Valhalla. Эта короткая статья описывает проблему, которую решает JEP, и содержит бенчмарк на основе превью фичи из Java 22.

Читать далее
Всего голосов 36: ↑35 и ↓1+34
Комментарии14

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

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург

Хабргорода

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

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

Для этого нужны данные статей Хабра, названия городов с координатами и поиск этих названий в текстах статей. Задача осложняется великим и могучим языком со склонениями и многозначностью слов. Создание списка статей с Хабра за 2023 год по городам мне чем-то напомнило работу первых поисковых движков в рунете. Теперь я понимаю как кусали себя за локти программисты тех дней!

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии9

Как мы начали использовать виртуальные потоки Java 21 и на раз-два получили дедлок в TPC-C для PostgreSQL

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

В этом посте мы расскажем о примере дедлока в TPC-C для PostgreSQL, причиной которого является исключительно переход на виртуальные потоки Java 21 - и никаких проблем обедающих философов.

Читать далее
Всего голосов 21: ↑20 и ↓1+19
Комментарии31

Плагин для анализа планов PostgreSQL в IDE JetBrains и его разработка

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров6.6K

Для пользователей explain.tensor.ru - нашего сервиса визуализации PostgreSQL-планов, мы создали плагин "Explain PostgreSQL" для всех IDE от JetBrains, теперь есть возможность форматировать запросы и анализировать планы непосредственно в IDE.

Как использовать плагин и детали о его разработке читайте ниже.

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии21

Apache Flink. Как работает дедупликация данных в потоке Kafka-to-Kafka?

Время на прочтение20 мин
Количество просмотров5.6K

Всем привет, меня зовут Александр Бобряков. Я техлид в команде МТС Аналитики, занимаюсь Real-Time обработкой данных. Мы начали использовать фреймворк Apache Flink, и я решил поделиться на Хабре своим опытом внедрения этой технологии в цикле статей.

В предыдущей части «Как использовать Spring в качестве фреймворка для Flink-приложений» я рассказывал, как реализовать минимальное Flink-приложение с использованием фреймворка Spring. Мы запустили первую Flink-задачу в поднятом в docker-compose кластере, а также проверили корректность результата по соответствующим логам. В этой статье решим реальную бизнес-задачу дедупликации данных в пайплайне Kafka-to-Kafka.

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии0

Project Loom. Не только виртуальные потоки

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров6.2K

Начиная с Java 19 нам доступны виртуальные потоки, которые отличаются от обычных, тем что умеют освобождать поток операционной системы во время блокирующих I/O операций. Для этого на уровне JVM был реализован механизм сохранения в хипе и восстановления из хипа стека вызова. Проще говоря, были реализованы полноценные корутины на уровне JVM.

И это небольшая революция, на которую мало кто обратил внимание. Само API для таких нативных корутин непубличное, доступно через класс jdk.internal.vm.Continuation, в котором есть методы yield() и run() для сохранения и восстановления стека вызова соответственно. Но получить доступ до него несложно, нужно лишь добавить пару аргументов в строку запуска JVM (либо воспользоваться инструментом, который позволяет обходить ограничения JPMS).

Поэтому представляю свою небольшую библиотеку для доступа к нативным корутинам на Java: https://github.com/Anamorphosee/loomoroutines.

Читать далее
Всего голосов 26: ↑21 и ↓5+16
Комментарии20

Java Digest #8

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

🎄🎄Приветствуем в новогоднем Java Digest! 🎄🎄

В этом выпуске с радостью представляем некоторые захватывающие статьи, связанные с миром Java и его новейшими разработками. Приготовьтесь узнать о главных моментах Java в 2023 году, улучшениях в сборщиках мусора в JDK 21, устаревших функциях в Java 18—21, применении CDS с Spring Framework 6.1 и многом другом.

Читать новогодний выпуск
Всего голосов 14: ↑14 и ↓0+14
Комментарии2

Создание и использование BOM в Gradle

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

В каждой компании (а если она крупная, то, скорее всего, в каждом подразделении) должна быть выстроена культура использования BOM (bill of materials) для управления версиями зависимостей. В этой статье я хочу поделиться своим видением того, как это может быть организовано, а также рассмотреть более сложные случаи создания и использования BOM в Gradle-проектах.

Читать далее
Всего голосов 13: ↑12 и ↓1+11
Комментарии9

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

Работа

Java разработчик
333 вакансии