Чашечка Java
8.48K subscribers
3.88K photos
14 videos
56 files
6.34K links
Лучшие материалы по Java на русском и английском

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels
Download Telegram
Shift-Left тестирование с Testcontainers: ловим баги на ранних этапах локальными интеграционными тестами

Баги, пойманные на проде, всегда стоят слишком дорого — и времени, и нервов, и репутации. Юнит-тесты не видят проблем с реальными зависимостями, моки быстро устаревают, а интеграционные среды тормозят разработку. Выход ищут в подходе shift-left: проверять критичную бизнес-логику раньше, прямо в IDE, без ожидания CI. В этой статье разберём, как библиотека Testcontainers позволяет поднимать реальные сервисы в контейнерах, писать интеграционные тесты так же просто, как юнит-тесты, и что это даёт с точки зрения скорости и качества по метрикам DORA.


Читать: https://habr.com/ru/companies/otus/articles/943098/?utm_campaign=943098

@a_cup_of_java | Другие наши каналы
Запуск бинарных файлов из data/data на Android 10+ (Обход SELinux)

Всем привет! Как многие знают, с Android 10 (Target sdk 29) google ввели новую политику безопасности. Новая политика SELinux звучит просто: "Нельзя исполнять файлы из той директории, в которую можно записывать". Всё это очень хорошо, но многие проекты сломались (В том числе и мой). Termux из google play УМЕЕТ запускать бинарные файлы на target sdk 29+. Я решил поделится как выполнить бинарный файл из data/data/com.ваш.пакет/files на новых версиях sdk БЕЗ полного клонирования Termux и БЕЗ С/C++ части. Сам метод запуска будет именно на java. Репозиторий termux, откуда был взят способ: https://github.com/termux-play-store/termux-apps

В чём суть, любой бинарный файла который вы запускаете имеет свой контекст. Если вы запускаете через нативную директорию (data/app/и так далее) перед этим положив бинарные файлы в jniLins - контекст у такого бинарного файла будет правильным и SELinux даст разрешение на запуск (Granted), но в случае с data/data другой случай, оттуда SELinux УЖЕ ОТКАЖЕТСЯ запускать бинарный файл (Denied). Разрешил SELinux запуск или отклонил можно смотреть в logcat. Однако, в системе существует системная утилита которая может запустить бинарник, а самое главное - SELinux РАЗРЕШИТ ей запустится, так как она системная. Её имя - linker или linker64 (Зависит от разрядности, 32 бита или 64)

Запустив линкер и передав ему наш бинарный файл из data/data - SELinux разрешит ему выполнится и сразу разрешит исполнение нашего бинарного файла. Тут сразу возникает вопрос, а если бинарный файл попробует подключить so библиотеку? Ей будет отказано? Здесь тоже есть решение, существует termux-exec. Это бинарный файл, который перехватывает попытку подключения чего либо и выполняет трюк с линкером. (linker или linker64 определяет автоматически). Вы можете собрать его из исходников (https://github.com/termux-play-store/termux-exec), но лично я полностью скопировал среду (Где этот уже собранный файл идёт в usr/lib) termux, так как мне нужно было запускать OpenJDK 17 под termux.


Читать: https://habr.com/ru/articles/943188/?utm_campaign=943188

@a_cup_of_java | Другие наши каналы
Рынок труда тестировщиков-автоматизаторов в России (2025)

Спрос на QA-специалистов в России продолжает расти, однако конкуренция в этой нише очень высокая. Так, по данным Computerra, в числе наиболее востребованных ИТ-специалистов в 2025 году оказались именно тестировщики и специалисты по написанию автотестов. При этом работодатели всё чаще требуют от тестировщиков навыков уровня начинающего разработчика: знания бэкенда, фронтенда, работы с БД и умения писать скрипты для автотестов. В этой статье мы подробно рассмотрим актуальные языки программирования, фреймворки и инструменты в автоматизации тестирования, требования работодателей, типичные этапы собеседований, а также рекомендации по подготовке.


Читать: https://habr.com/ru/articles/943414/?utm_campaign=943414

@a_cup_of_java | Другие наши каналы
Когда дело не в коде: как мы ловили мистические пропажи аукционов на сетевом уровне

Привет, меня зовут Анатолий, я ведущий разработчик в ITFB Group. У нас высоконагруженный сервис аукционов. И раз в неделю, как по расписанию, раздавался панический звонок: «Опять пропали аукционы!». Мы неслись смотреть логи — а там... ничего. Ни ошибок, ни падений. Никаких пятисотых, только стабильные двухсотые. Стенды dev и prod молчали, как рыбы. Аукционы загадочным образом появлялись через некоторое время, и всё работало, пока история не повторялась снова. Это был не баг, это был призрак. Призрак в сети.

Сегодня я расскажу, как мы его поймали.


Читать: https://habr.com/ru/companies/itfb/articles/943482/?utm_campaign=943482

@a_cup_of_java | Другие наши каналы
5😁2
Мой путь новичка в разработке: FreeSpace — мобильное приложение для любителей космоса

Меня зовут Маша, я ученица «IT Школы Samsung». Хочу рассказать о своём проекте — мобильном приложении FreeSpace, которое объединяет новости о космосе, интерактивную карту и сообщество энтузиастов. Это не просто рассказ о коде, но и история моего пути в Android-разработке.


Читать: https://habr.com/ru/companies/samsung/articles/943884/?utm_campaign=943884

@a_cup_of_java | Другие наши каналы
API LSP теперь доступен всем пользователям IntelliJ IDEA и разработчикам плагинов

Команда Spring АйО перевела статью от JetBrains, в которой рассказано про избавление одного из главных барьеров на пути к массовому внедрению Language Server Protocol (LSP) в своей экосистеме.

С версии IntelliJ IDEA Ultimate 2025.2 пользователи смогут использовать LSP даже после окончания подписки, а с 2025.3 — LSP станет доступным во всех редакциях IDE благодаря переходу на единый дистрибутив.


Читать: https://habr.com/ru/companies/spring_aio/articles/943896/?utm_campaign=943896

@a_cup_of_java | Другие наши каналы
4
Как мы Best Practices в Java анализатор внедряли

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


Читать: https://habr.com/ru/companies/pvs-studio/articles/944164/?utm_campaign=944164

@a_cup_of_java | Другие наши каналы
Бесконечные циклы. Всё, что может пойти не так — пойдёт не так

Конструкции типа while(true) или for(;;) довольно опасные. Когда люди их пишут, то всегда надеются на то, что сработает условие выхода из цикла. Однако, на самом деле, как бы мы ни были уверены, такие конструкции лучше избегать.

В любом программном продукте есть баги, и те инварианты, на которые идёт расчёт, могут просто не сработать. Решение? Читайте в переводе от команды Spring АйО, где автор указывает примеры того, как с этими конструкциями поступили в Jooq и как с ними работает один из департаментов University of California.


Читать: https://habr.com/ru/companies/spring_aio/articles/944228/?utm_campaign=944228

@a_cup_of_java | Другие наши каналы
🤪1
Как мы в Java-проекте UDT для PostgreSQL поддерживали

PostgreSQL позволяет создавать хранимые функции и процедуры. И если при их вызове с простыми данными проблем не возникает, то сложные иерархические структуры могут вызвать трудности.

В статье мы разберёмся, как передавать и получать вложенные объекты в процедурах и функциях PostgreSQL с помощью JDBC.


Читать: https://habr.com/ru/companies/bercut/articles/940614/?utm_campaign=940614

@a_cup_of_java | Другие наши каналы
2
Как мы разработали простой, но эффективный инструмент для HR

Привет, Хабр!  Меня зовут Сергей Филатов и я работают в R-Style Softlab. Сегодня расскажу о разработке с помощью Jmix удобного коннектора для HR-подразделения, который поможет менеджерам работать с наймом сотрудников.

Мы проанализировали типовой процесс найма сотрудников, который происходит в управлениях по работе с персоналом в разных компаниях и предложили свое решение для автоматизации:  простой внутренний инструмент для распознавания и заполнения карточек в “1С. Зарплата и Управление персоналом” и дальнейшей работы с этими сведениями.

Модуль умеет распознавать массив скан-документов от группы соискателей, подгружать их в 1С, автоматически заполнять карточки соискателей и предоставлять возможность проверки заполненных сведений сотруднику Службы безопасности. Звучит просто, но это помогает экономить множество часов рабочего времени сотрудников HR и сотрудников СБ, которые заняты проверкой кандидатов, убирает рутину и позволяет вести подбор кандидатов быстрее (и эффективнее!).

Еще несколько преимуществ:


Читать: https://habr.com/ru/articles/944344/?utm_campaign=944344

@a_cup_of_java | Другие наши каналы
Туториал kafka + springboot + docker

Я часто работаю с Apache Kafka, но внезапно поймал себя на мысли, что совсем не понимаю как она устроена. Тогда я решил поднять кафку локально и поиграться с ней, а чтобы точно понимать что я делаю - написал эту статью.


Читать: https://habr.com/ru/articles/944672/?utm_campaign=944672

@a_cup_of_java | Другие наши каналы
95% пилотных проектов в области генеративного ИИ в компаниях проваливаются

Несмотря на высокий интерес компаний к генеративному ИИ и его потенциал для роста выручки, подавляющее большинство корпоративных проектов терпит неудачу. Новый отчёт MIT указывает, что только 5% пилотных внедрений приносят ощутимый финансовый эффект. В переводе от команды Spring АйО рассмотрим основные причины, которые кроются не в самих моделях, а в ошибочной интеграции, неправильных приоритетах и нехватке адаптации под бизнес-процессы.


Читать: https://habr.com/ru/companies/spring_aio/articles/944546/?utm_campaign=944546

@a_cup_of_java | Другие наши каналы
🕊1
Как прокачать Java-приложения без миграции: Axiom JDK Express теперь на JVM 21

Мы знаем, как это бывает: проект на Java 8 живёт уже десятый год, релизить страшно, тестов мало, миграция пугает, а система критичная. И вот бизнес хочет «ускорить и не трогать».


Читать: https://habr.com/ru/companies/axiomjdk/articles/944036/?utm_campaign=944036

@a_cup_of_java | Другие наши каналы
Какие задачи можно решать при помощи AI агента

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

В этой статье расскажем, как работает AI агент для написания кода Explyt Agent и какие задачи он решает.
Что умеет AI агент

Читать: https://habr.com/ru/companies/explyt/articles/932944/?utm_campaign=932944

@a_cup_of_java | Другие наши каналы
Обновления в мире Java: JDK 26 готовится к поддержке HTTP/3, Payara Platform выпустила свежий релиз с улучшениями, TornadoVM обновился до версии 0.2.0 с поддержкой Windows и новыми моделями. Также вышли обновления для Quarkus, Micronaut, Apache Kafka, Grails и Gradle.

Подробности: https://www.infoq.com/news/2025/09/java-news-roundup-sep01-2025/

#en

@a_cup_of_java | Другие наши каналы
Что скрывает ваш API Gateway

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

Хорошо спроектированный и надежный API — это ворота, через которые ваши данные и функциональность взаимодействуют с внешним миром: мобильными приложениями, веб‑сайтами, партнерскими сервисами и даже внутренними клиентами.


Читать: https://habr.com/ru/companies/otus/articles/944940/?utm_campaign=944940

@a_cup_of_java | Другие наши каналы
Java Digest #28

Всем привет! 👋👋👋👋👋

Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

Соскучились по AoT-компиляции? Даже если нет, упоминаний о ней не избежать. Java 25, Spring 7, Spring Boot 4, Gradle 9.0.0, Intellij IDEA 2025.2, Amplicode 2025.2, что-то релизнулось, что-то только собирается, но обо всем уже нашли статьи и собрали для вас.

А теперь к громким новостям. Нидерландские ученые убили SQL — именно так мог бы звучать заголовок к научной статье о том, как 2,5 млн строк кода на PL/SQL переводили на Java с помощью LLM.


Читать: https://habr.com/ru/companies/tbank/articles/945032/?utm_campaign=945032

@a_cup_of_java | Другие наши каналы
👍1
Testcontainers: путь к надежным интеграционным тестам в Spring Boot

Мы знаем, что разработка надежных приложений требует тщательного тестирования. Многие программисты и даже целые компании склонны полагаться исключительно на юнит-тесты, считая, что этого достаточно для обеспечения качества их приложений. Однако такой подход часто демонстрирует свои минусы на этапе вывода функционала в тестовый контур, а далее уже в продакшн. Где-то не заполнилось поле, которое должно быть Not Null, где-то не создался Kafka-consumer из-за опечатки в конфиге. Сколько раз такие проблемы возникали в вашей практике и приводили к тому, что нужно срочно делать Pull Request с исправлением очевидной ошибки, испытывая стыд перед коллегами за то, что совершили такую элементарную оплошность? Сколько раз компоненты, прекрасно работающие по отдельности, выбрасывали пачки исключений при совместной работе?

Избежать таких сценариев помогут интеграционные тесты. И сегодня мы поговорим об одном из инструментов интеграционного тестирования – TestContainers.


Читать: https://habr.com/ru/articles/945240/?utm_campaign=945240

@a_cup_of_java | Другие наши каналы
Forwarded from ОТП Тех
С Днем тестировщика! 🐞🎉

Дорогие охотники за багами и главные спасатели продакшена! Сеогдня ваш день — день тех, кто находит чёрную кошку в тёмной комнате, при условии, что её там и не должно быть 😁

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

Ваша работа бесценна, а внимательность — легендарна. Поэтому предлагаю првоерить это поздравление на прочность!

Всего в тексте и на картинке 5 орфографических «багов».

Нашли все 5? Ставьте 😎
Нашли только часть? Ставьте 🌚

И делитесь постом с коллегами по цеху — пусть присоединяются к празднованию!
❤‍🔥2😎2
Что нового в Maven 4?

В новом переводе от команды Spring АйО рассматриваются основные изменения, которые ждут нас в новой версии Maven. Изменения затронули performance, POM, новый тип упаковки, улучшения для подпроектов и много другое.


Читать: https://habr.com/ru/companies/spring_aio/articles/945436/?utm_campaign=945436

@a_cup_of_java | Другие наши каналы