Extension API в JUnit 5 заменяет
✅ Единая модель: реализуете lifecycle-хуки вроде
✅
✅ Extensions компонуются: можно навесить несколько расширений через
Демо-проект на GitHub: https://github.com/mcasari/codingstrain/tree/main/x-posts-examples/junit5-extension-api-demo
#Java #JUnit5
👉 Java Portal
@RunWith, Runner и @Rule из JUnit 4.✅ Единая модель: реализуете lifecycle-хуки вроде
BeforeEachCallback вместо эксклюзивного Runner✅
ParameterResolver инжектит зависимости в тесты, без наследования от базового класса ✅ Extensions компонуются: можно навесить несколько расширений через
@ExtendWith.Демо-проект на GitHub: https://github.com/mcasari/codingstrain/tree/main/x-posts-examples/junit5-extension-api-demo
#Java #JUnit5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Java: избегайте магических чисел.
В Java магическим числом (Magic Number) называют жёстко заданное числовое значение, используемое в коде без какого-либо пояснения того, что именно оно обозначает.
Магические числа снижают читаемость кода и усложняют его сопровождение.
#JavaDev #CleanCode
👉 Java Portal
В Java магическим числом (Magic Number) называют жёстко заданное числовое значение, используемое в коде без какого-либо пояснения того, что именно оно обозначает.
Магические числа снижают читаемость кода и усложняют его сопровождение.
#JavaDev #CleanCode
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3
Почему Twelve-Factor App важен
Он описывает проверенные временем архитектурные паттерны и практики, которые можно применять к SaaS-приложениям. Эти подходы помогают создавать софт, который будет устойчивым и легко переносимым при деплое в онлайн-среду.
Двенадцать факторов:
I. Codebase
Одна кодовая база под управлением системы контроля версий, много окружений для деплоя
II. Dependencies
Явное объявление и изоляция зависимостей
III. Config
Хранение конфигурации в окружении
IV. Backing services
Внешние сервисы воспринимаются как подключаемые ресурсы
V. Build, release, run
Жёсткое разделение стадий сборки, релиза и запуска
VI. Processes
Приложение запускается как один или несколько Stateless-процессов
VII. Port binding
Экспорт сервисов через привязку к порту
VIII. Concurrency
Масштабирование через модель процессов
IX. Disposability
Максимальная надёжность за счёт быстрого старта и корректного завершения
X. Dev/prod parity
Минимизировать различия между dev, staging и production
XI. Logs
Логи рассматриваются как поток событий
XII. Admin processes
Админские задачи выполняются как одноразовые процессы
В книге Beyond the 12 Factor App Кевин Хоффман дополняет эти принципы новыми пунктами, включая телеметрию и безопасность:
👉 Java Portal
Он описывает проверенные временем архитектурные паттерны и практики, которые можно применять к SaaS-приложениям. Эти подходы помогают создавать софт, который будет устойчивым и легко переносимым при деплое в онлайн-среду.
Двенадцать факторов:
I. Codebase
Одна кодовая база под управлением системы контроля версий, много окружений для деплоя
II. Dependencies
Явное объявление и изоляция зависимостей
III. Config
Хранение конфигурации в окружении
IV. Backing services
Внешние сервисы воспринимаются как подключаемые ресурсы
V. Build, release, run
Жёсткое разделение стадий сборки, релиза и запуска
VI. Processes
Приложение запускается как один или несколько Stateless-процессов
VII. Port binding
Экспорт сервисов через привязку к порту
VIII. Concurrency
Масштабирование через модель процессов
IX. Disposability
Максимальная надёжность за счёт быстрого старта и корректного завершения
X. Dev/prod parity
Минимизировать различия между dev, staging и production
XI. Logs
Логи рассматриваются как поток событий
XII. Admin processes
Админские задачи выполняются как одноразовые процессы
В книге Beyond the 12 Factor App Кевин Хоффман дополняет эти принципы новыми пунктами, включая телеметрию и безопасность:
- Один код, одно приложение
- API first
- Управление зависимостями
- Design, build, release, run
- Конфигурация, креды и код
- Логи
- Disposability
- Внешние сервисы
- Эквивалентность окружений
- Административные процессы
- Port binding
- Stateless-процессы
- Конкурентность
- Телеметрия
- Аутентификация и авторизация
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
💡 Java: Удаляйте неиспользуемые импорты и переменные для повышения читаемости кода.
Лишние импорты и неиспользуемые переменные создают визуальный шум, усложняют навигацию по коду и затрудняют поддержку. Большинство IDE умеют автоматически находить и удалять такой код.
#Java #CleanCode
👉 Java Portal
Лишние импорты и неиспользуемые переменные создают визуальный шум, усложняют навигацию по коду и затрудняют поддержку. Большинство IDE умеют автоматически находить и удалять такой код.
#Java #CleanCode
Please open Telegram to view this post
VIEW IN TELEGRAM
Наткнулся на GitHub-репозиторий для изучения System Design - - - https://github.com/systemdesign42/system-design-academy
Внутри собраны материалы как для подготовки к собеседованиям, так и для понимания того, как устроены реальные системы.
Что есть:
• Основы System Design
• Базовые концепции AI Engineering
• Вопросы по System Design для собеседований
• Разборы архитектур реальных сервисов
• Упрощённые инженерные кейсы с визуализациями и схемами
Понравилось, что материал собран в одном месте и не требует прыгать между десятками статей, видео и блогов.
Хороший вариант для тех, кто хочет закрыть пробелы в архитектуре систем или подготовиться к design-интервью.
👉 Java Portal
Внутри собраны материалы как для подготовки к собеседованиям, так и для понимания того, как устроены реальные системы.
Что есть:
• Основы System Design
• Базовые концепции AI Engineering
• Вопросы по System Design для собеседований
• Разборы архитектур реальных сервисов
• Упрощённые инженерные кейсы с визуализациями и схемами
Понравилось, что материал собран в одном месте и не требует прыгать между десятками статей, видео и блогов.
Хороший вариант для тех, кто хочет закрыть пробелы в архитектуре систем или подготовиться к design-интервью.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - systemdesign42/system-design-academy: If you want to become good at system design, join this newsletter now 👇
If you want to become good at system design, join this newsletter now 👇 - systemdesign42/system-design-academy
👍3❤2
Java-совет: старайтесь избегать статических переменных, если они не хранят действительно глобальные значения.
Они усложняют тестирование, поскольку общий изменяемый state затрудняет изоляцию классов и делает тесты более зависимыми друг от друга.
👉 Java Portal
Они усложняют тестирование, поскольку общий изменяемый state затрудняет изоляцию классов и делает тесты более зависимыми друг от друга.
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Java: используйте
#SoftwareDevelopment
👉 Java Portal
StringBuilder вместо String для конкатенации строк в циклах.String является неизменяемым (immutable), поэтому его использование в циклах, особенно больших, работает неэффективно.StringBuilder является изменяемым (mutable) и оптимизирован для многократного добавления строк.#SoftwareDevelopment
Please open Telegram to view this post
VIEW IN TELEGRAM
Большинство команд, которые делают data-агентов, городят целый зоопарк из роутеров, fine-tune моделей и RAG-пайплайнов поверх нескольких LLM.
OpenAI сделала иначе.
Их data-агент работает на одной модели и всего с 13 инструментами, при этом умеет ориентироваться в 1,5 эксабайта данных и 90 000 таблиц.
По словам команды, архитектура получилась на удивление простой.
Недавно OpenAI рассказала, как всё устроено под капотом:
• архитектура data-агента
• 6 уровней контекста, которые позволяют одной LLM уверенно работать с 90 000 таблиц
• 3 реальных сценария использования Codex внутри OpenAI
• 5 практических выводов для тех, кто строит собственных агентов под конкретную предметную область
• куда будет развиваться дата-платформа OpenAI дальше
Интересно, что главный вывод не про очередной сложный агентный фреймворк, а скорее про то, как далеко можно зайти с одной моделью, если правильно организовать контекст и инструменты.
👉 Java Portal
OpenAI сделала иначе.
Их data-агент работает на одной модели и всего с 13 инструментами, при этом умеет ориентироваться в 1,5 эксабайта данных и 90 000 таблиц.
По словам команды, архитектура получилась на удивление простой.
Недавно OpenAI рассказала, как всё устроено под капотом:
• архитектура data-агента
• 6 уровней контекста, которые позволяют одной LLM уверенно работать с 90 000 таблиц
• 3 реальных сценария использования Codex внутри OpenAI
• 5 практических выводов для тех, кто строит собственных агентов под конкретную предметную область
• куда будет развиваться дата-платформа OpenAI дальше
Интересно, что главный вывод не про очередной сложный агентный фреймворк, а скорее про то, как далеко можно зайти с одной моделью, если правильно организовать контекст и инструменты.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Паттерн Circuit Breaker не пытается бесконечно достучаться до упавшего сервиса. Он понимает, когда пора остановиться.
Closed → Open → Half-Open → Closed
Как работает:
• Closed — запросы проходят нормально, ошибки отслеживаются.
• Open — после достижения порога ошибок новые запросы сразу отклоняются без попытки обратиться к сервису.
• Half-Open — через некоторое время пропускается несколько тестовых запросов.
• Closed — если сервис восстановился, трафик возвращается в штатный режим.
Что это даёт:
• защищает систему от каскадных сбоев;
• снижает нагрузку на проблемный сервис;
• уменьшает задержки для клиентов;
• ускоряет восстановление после инцидентов.
Защищай. Быстро отказывай. Восстанавливайся. Повторяй.
#SystemDesign #SoftwareArchitecture #Microservices #DevOps #BackendDevelopment
👉 Java Portal
Closed → Open → Half-Open → Closed
Как работает:
• Closed — запросы проходят нормально, ошибки отслеживаются.
• Open — после достижения порога ошибок новые запросы сразу отклоняются без попытки обратиться к сервису.
• Half-Open — через некоторое время пропускается несколько тестовых запросов.
• Closed — если сервис восстановился, трафик возвращается в штатный режим.
Что это даёт:
• защищает систему от каскадных сбоев;
• снижает нагрузку на проблемный сервис;
• уменьшает задержки для клиентов;
• ускоряет восстановление после инцидентов.
Защищай. Быстро отказывай. Восстанавливайся. Повторяй.
#SystemDesign #SoftwareArchitecture #Microservices #DevOps #BackendDevelopment
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Многие пишут SQL-запросы сверху вниз и думают, что СУБД выполняет их в том же порядке.
Но SQL работает иначе.
Фактический порядок выполнения выглядит так:
1. FROM
2. JOIN
3. WHERE
4. GROUP BY
5. HAVING
6. SELECT
7. ORDER BY
8. LIMIT
Именно поэтому алиасы из SELECT нельзя использовать в WHERE, а ошибки в агрегатах часто оказываются не там, где их ищут.
Понимание порядка выполнения помогает:
• быстрее отлаживать запросы;
• правильно использовать агрегации;
• избегать логических ошибок;
• писать более предсказуемый SQL.
Если запрос ведёт себя странно, проверь не то, как он написан, а то, как его выполняет движок базы данных.
👉 Java Portal
Но SQL работает иначе.
Фактический порядок выполнения выглядит так:
1. FROM
2. JOIN
3. WHERE
4. GROUP BY
5. HAVING
6. SELECT
7. ORDER BY
8. LIMIT
Именно поэтому алиасы из SELECT нельзя использовать в WHERE, а ошибки в агрегатах часто оказываются не там, где их ищут.
Понимание порядка выполнения помогает:
• быстрее отлаживать запросы;
• правильно использовать агрегации;
• избегать логических ошибок;
• писать более предсказуемый SQL.
Если запрос ведёт себя странно, проверь не то, как он написан, а то, как его выполняет движок базы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4
В Docker можно поднять полноценный Android-эмулятор одной командой.
Без установки Android Studio, ручной настройки AVD и прочей возни.
Что есть из коробки:
• аппаратное ускорение через GPU
• поддержка KVM для более высокой производительности
• headless-режим для CI/CD и автоматизации
• запуск полностью внутри Docker-контейнера
Удобная штука для тестирования Android-приложений, мобильной автоматизации и агентных сценариев.
Бесплатно и с открытым исходным кодом
https://github.com/HQarroum/docker-android
👉 Java Portal
Без установки Android Studio, ручной настройки AVD и прочей возни.
Что есть из коробки:
• аппаратное ускорение через GPU
• поддержка KVM для более высокой производительности
• headless-режим для CI/CD и автоматизации
• запуск полностью внутри Docker-контейнера
Удобная штука для тестирования Android-приложений, мобильной автоматизации и агентных сценариев.
Бесплатно и с открытым исходным кодом
https://github.com/HQarroum/docker-android
Please open Telegram to view this post
VIEW IN TELEGRAM
Два backend-разработчика решали одну и ту же задачу.
Вариант A:
Вариант B:
Какой запрос отправится в прод?
Многие выбирают B, потому что он выглядит надёжнее. Пользователь может ввести
Но есть нюанс.
В большинстве СУБД вызов
На 100 строках разницы не видно.
На 10 миллионах пользователей разница становится очень заметной.
Поэтому в проде обычно используют один из вариантов:
• хранить email в нормализованном виде (например, всегда lowercase);
• использовать case-insensitive collation;
• создать функциональный индекс на
Самая опасная часть запроса часто выглядит как самая безобидная.
👉 Java Portal
Вариант A:
SELECT *
FROM users
WHERE email = ?
Вариант B:
SELECT *
FROM users
WHERE LOWER(email) = LOWER(?)
Какой запрос отправится в прод?
Многие выбирают B, потому что он выглядит надёжнее. Пользователь может ввести
John@Example.com, а в базе лежит john@example.com.Но есть нюанс.
В большинстве СУБД вызов
LOWER() над колонкой ломает использование обычного индекса. Вместо быстрого Index Seek база часто уходит в полный скан таблицы.На 100 строках разницы не видно.
На 10 миллионах пользователей разница становится очень заметной.
Поэтому в проде обычно используют один из вариантов:
• хранить email в нормализованном виде (например, всегда lowercase);
• использовать case-insensitive collation;
• создать функциональный индекс на
LOWER(email).Самая опасная часть запроса часто выглядит как самая безобидная.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2
Spring Boot 4.1 получит поддержку ленивого получения JDBC-соединений
DataSource будет оборачиваться в🔥
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1.0-RC1-Release-Notes
👉 Java Portal
DataSource будет оборачиваться в
LazyConnectionDataSourceProxy, а физическое соединение из пула станет запрашиваться только в тот момент, когда приложению действительно потребуется выполнить JDBC-запрос. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1.0-RC1-Release-Notes
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Spring Boot 4.1.0 RC1 Release Notes
Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-boot
🤯4
Лучшие практики Spring Boot REST API
Часть 1: Реализация API Get Collection
Часть 2: Реализация API Create и Update
Часть 3: Реализация FindById и DeleteById API
Часть 4: Обработка исключений в REST API
👉 Java Portal
Часть 1: Реализация API Get Collection
Часть 2: Реализация API Create и Update
Часть 3: Реализация FindById и DeleteById API
Часть 4: Обработка исключений в REST API
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
💡 Java: Используйте default-методы в интерфейсах для сохранения обратной совместимости (начиная с Java 8).
Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.
#Java #Interfaces
👉 Java Portal
Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.
#Java #Interfaces
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
10 июня(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Виктор Анохин, старший разработчик из WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Виктор будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Виктору
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.
#Java #JavaDev
👉 Java Portal
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.
#Java #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Вышла статья о распространённых случаях, когда
Поскольку такие ситуации встречаются во фреймворках, библиотеках и обычных приложениях, материал будет полезен разработчикам всех этих типов проектов.🤝
Разбираются причины использования рефлексии для изменения
https://inside.java/2026/04/27/avoiding-final-field-mutation/
👉 Java Portal
final-поля изменяются через рефлексию, и какие альтернативы можно использовать вместо этого.Поскольку такие ситуации встречаются во фреймворках, библиотеках и обычных приложениях, материал будет полезен разработчикам всех этих типов проектов.
Разбираются причины использования рефлексии для изменения
final-полей, связанные проблемы и варианты миграции на более безопасные решения.https://inside.java/2026/04/27/avoiding-final-field-mutation/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1