Spring Boot с AOP:
Spring Boot позволяет использовать аспектно-ориентированное программирование , чтобы вынести сквозную логику (например, логирование, безопасность или кеширование) отдельно от бизнес-логики.
Можно даже создавать свои аннотации, которые автоматически навешивают нужное поведение, сохраняя код чистым и декларативным
1. Создаётся аннотация
Её можно навесить на любой метод, чтобы включить замер времени выполнения.
2. Аспект
- Перехватывает вызов методов с аннотацией
- Сохраняет время старта → выполняет метод → считает разницу → выводит результат в лог.
3. Контроллер
- Метод hello() помечен
- При каждом запросе на /hello метод будет логироваться с замером времени.
AOP здесь убирает дублирование логики измерения времени.
Вместо того чтобы вставлять
👉 Java Portal
Spring Boot позволяет использовать аспектно-ориентированное программирование , чтобы вынести сквозную логику (например, логирование, безопасность или кеширование) отдельно от бизнес-логики.
Можно даже создавать свои аннотации, которые автоматически навешивают нужное поведение, сохраняя код чистым и декларативным
1. Создаётся аннотация
@LogExecutionTime
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {}
Её можно навесить на любой метод, чтобы включить замер времени выполнения.
2. Аспект
LoggingAspect
@Aspect
@Component
public class LoggingAspect {
@Around("@annotation(LogExecutionTime)")
public Object logExecution(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // выполнить метод
long timeTaken = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + timeTaken + " ms");
return result;
}
}
- Перехватывает вызов методов с аннотацией
@LogExecutionTime
- Сохраняет время старта → выполняет метод → считает разницу → выводит результат в лог.
3. Контроллер
TestController
@RestController
public class TestController {
@GetMapping("/hello")
@LogExecutionTime
public String hello() throws InterruptedException {
Thread.sleep(500); // имитация работы
return "Hello, World!";
}
}
- Метод hello() помечен
@LogExecutionTime
- При каждом запросе на /hello метод будет логироваться с замером времени.
AOP здесь убирает дублирование логики измерения времени.
Вместо того чтобы вставлять
System.currentTimeMillis()
в каждый метод, всё вынесено в один аспект.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
ИТ-специалисты Петербурга, общий сбор
6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.
Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.
В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными.
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.
Во второй день:
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.
Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.
Успейте зарегистрироваться до 5 сентября
6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.
Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.
В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными.
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.
Во второй день:
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.
Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.
Успейте зарегистрироваться до 5 сентября
JavaCV
Это Java-обёртка к OpenCV, FFmpeg и другим нативным библиотекам через JavaCPP Presets. Позволяет делать компьютерное зрение и обработку видео и аудио на JVM.
Умеет делать захват с камеры и из файлов, декодирование и кодирование, обработка изображений, интеграция с библиотеками вроде OpenCV, FFmpeg, Tesseract, librealsense и др. Работает на Windows, macOS, Linux и Android.
Пакет есть в Maven Central. Готовые бинари подтянутся автоматически.
Примеры кода есть в репозитории с демо
Домашняя страница проекта с деталями про JavaCPP и пресеты
👉 Java Portal
Это Java-обёртка к OpenCV, FFmpeg и другим нативным библиотекам через JavaCPP Presets. Позволяет делать компьютерное зрение и обработку видео и аудио на JVM.
Умеет делать захват с камеры и из файлов, декодирование и кодирование, обработка изображений, интеграция с библиотеками вроде OpenCV, FFmpeg, Tesseract, librealsense и др. Работает на Windows, macOS, Linux и Android.
Пакет есть в Maven Central. Готовые бинари подтянутся автоматически.
Примеры кода есть в репозитории с демо
Домашняя страница проекта с деталями про JavaCPP и пресеты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Boolean-функции в Java Stream API
При работе со Stream API часто нужно проверить, подходят ли элементы под какое-то условие. Для этого есть методы, которые возвращают true или false.
Основные такие методы:
1.
Возвращает true, если в потоке есть хотя бы один элемент, который проходит проверку.
2.
Возвращает true, если все элементы удовлетворяют условию.
3.
Даёт true, если в потоке нет ни одного элемента, соответствующего условию.
👉 Java Portal
При работе со Stream API часто нужно проверить, подходят ли элементы под какое-то условие. Для этого есть методы, которые возвращают true или false.
Основные такие методы:
1.
anyMatch(Predicate)
Возвращает true, если в потоке есть хотя бы один элемент, который проходит проверку.
List<String> names = List.of("Alice", "Bob", "Anna");
boolean hasShortName = names.stream()
.anyMatch(name -> name.length() < 4);
// → true (подходит "Bob")
2.
allMatch(Predicate)
Возвращает true, если все элементы удовлетворяют условию.
List<String> names = List.of("Alice", "Bob", "Anna");
boolean allStartWithA = names.stream()
.allMatch(name -> name.startsWith("A"));
// → false
3.
noneMatch(Predicate)
Даёт true, если в потоке нет ни одного элемента, соответствующего условию.
List<String> names = List.of("Alice", "Bob", "Anna");
boolean noneEmpty = names.stream()
.noneMatch(String::isEmpty);
// → true
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2🔥2
Java Portal | Программирование
Первая статья из серии, где показывается как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать гораздо лучше с помощью Embabel Сегодняшняя цель CrewAI — читать 👉 Java Portal
Второй пост в блоге показывает, как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать лучше с помощью Embabel.
Сегодня в фокусе: Pydantic AI — читать
👉 Java Portal
Сегодня в фокусе: Pydantic AI — читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
image_2025-08-22_08-09-28.png
587.6 KB
Наткнулся на такой пост от сеньора, про предварительные условия для System Design:
👉 Java Portal
1. Понимание цели
Разберись, что именно ты строишь, кто будет пользоваться и для чего это нужно.
2. Профиль трафика (read-heavy vs write-heavy)
Если система в основном читает (много пользователей просматривают данные), делай упор на кэширование, индексацию, реплики для чтения. Пример: каталог Netflix, карточки товаров Amazon.
Если в основном пишут (много аплоадов, входящих данных), подойдут очереди, пакетная запись, eventual consistency. Пример: сообщения WhatsApp, данные IoT-датчиков.
3. Консистентность vs доступность
Строгая консистентность нужна там, где ошибка недопустима (банки, бронирование).
Eventual consistency подходит там, где можно жить с устаревшими данными (Instagram, аналитика).
4. Требования к задержке
Реалтайм — оптимизация под низкую задержку через кэш или предвычисления. Примеры: гейминг, Zoom, подтверждение платежей.
Асинхронно — очередь и фоновые воркеры. Примеры: e-mail рассылка, генерация отчётов.
5. Масштабируемость
Закладывай рост ×10. Пример: Google Docs начинался маленьким, но сейчас обрабатывает миллионы правок одновременно. Uber — тысячи поездок в минуту. Используй stateless-сервисы и горизонтальное масштабирование.
6. Паттерны доступа
Оптимизируй под то, какие данные и как часто читаются: поиск по гео/локации (geo-hash + ElasticSearch), быстрый доступ к часто используемым ID (Redis/Memcached).
7. Рост данных и партиционирование
Продумывай шардинг заранее (по пользователю, времени, гео). Пример: комментарии YouTube шардуются по ID видео.
Холодные данные сжимай или архивируй (Gmail, Google Drive).
8. Обработка отказов
Используй ретраи, фоллбэки, circuit breakers.
Если API падает по таймауту → повтор + настройка таймаута (пример: Amazon payment retry).
Если кэш недоступен → фоллбэк в БД (пример: Reddit загружает комментарии из БД).
9. Безопасность и авторизация
Авторизация: OAuth / JWT (пример: логин через Google или Spotify).
Защита от абузов и ботов: rate limiting, CAPTCHA (пример: Gmail signup, формы).
10. Нужно ли писать всё самому?
Некритичные фичи лучше вынести в SaaS или сторонние API:
Платежи — Stripe, PayPal.
Хранение медиа — Cloudinary, S3.
Уведомления — Firebase, SendGrid.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12😁1
Какие языки программирования самые «зелёные»?
Обычно при выборе языка мы смотрим на синтаксис, производительность или простоту обучения.
Но несколько лет назад группа португальских исследователей изучила энергопотребление 27 популярных языков программирования, измеряя время выполнения, энергозатраты и пиковое использование памяти.
Результаты показали компромиссы: быстрый код не всегда самый энергоэффективный, а работа с памятью сильно влияет на энергопотребление. Эти выводы могут помочь инженерам при выборе языка, когда важна энергоэффективность.
Выводы исследования:
Cи оказался самым энергоэффективным языком.
Python и Perl — наименее экологичные языки программирования.
Источник: читать
👉 Java Portal
Обычно при выборе языка мы смотрим на синтаксис, производительность или простоту обучения.
Но несколько лет назад группа португальских исследователей изучила энергопотребление 27 популярных языков программирования, измеряя время выполнения, энергозатраты и пиковое использование памяти.
Результаты показали компромиссы: быстрый код не всегда самый энергоэффективный, а работа с памятью сильно влияет на энергопотребление. Эти выводы могут помочь инженерам при выборе языка, когда важна энергоэффективность.
Выводы исследования:
Cи оказался самым энергоэффективным языком.
Python и Perl — наименее экологичные языки программирования.
Источник: читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁3👀2🤯1🏆1