В Java иерархия исключений начинается от класса
🔹
🔹
Внутри Exception выделяют:
🔹
🔹
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥1
Метрики норм, тесты зелёные, при пике трафика — БД ложится 👇
📦 Задание — code review
Сервис отдаёт профили пользователей. Для ускорения добавили кэш на 5 минут.
@Service
@RequiredArgsConstructor
public class UserProfileService {
private final UserRepository userRepository;
private final RedisTemplate<String, UserProfile> redisTemplate;
private static final Duration TTL = Duration.ofMinutes(5);
public UserProfile getProfile(Long userId) {
String key = "profile:" + userId;
UserProfile cached = redisTemplate.opsForValue().get(key);
if (cached != null) {
return cached;
}
UserProfile profile = userRepository.findById(userId)
.map(UserProfile::from)
.orElseThrow(UserNotFoundException::new);
redisTemplate.opsForValue().set(key, profile, TTL);
return profile;
}
}
▪️ Объясни
— Что именно происходит при истечении TTL под нагрузкой.
— Почему добавление @Cacheable над методом не спасёт ситуацию.
Ставьте → 🔥, если нравится формат. Если нет → 🌚
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍3❤1
Начать рассказывать интервьюеру, как вы ловко дёргаете ручки API через базовый
Звучит как отличный план, да? Нет, это мгновенный отказ.
В свежем отчёте по рынку GPU говорится, что 54% компаний стопают ИИ-внедрения тупо из-за конских затрат на инфраструктуру. На серверах более 70% стоимости — это видеокарты. Поэтому на собесах сейчас спрашивают не про красивые промпты, а про жёсткую экономику агентов.
По сути, от вас ждут понимания, как лимитировать ресурсы на лету, роутить запросы и дебажить отказы через механизм
Что требуют от мидлов и выше:
— интеграция мультиагентных систем по стандарту
— суровый AgentOps: метрики, трейсинг, защита от деградации пайплайнов;
— локальный деплой Open Source под 152-ФЗ (без этого в финтех можно даже не стучаться).
Прямо сейчас можно урвать курс с увесистой скидкой(49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек) , но стоит поторопиться — на потоке осталось всего 5 мест.
👉 Подтянуть архитектуру до уровня прода
LangChain.Звучит как отличный план, да? Нет, это мгновенный отказ.
В свежем отчёте по рынку GPU говорится, что 54% компаний стопают ИИ-внедрения тупо из-за конских затрат на инфраструктуру. На серверах более 70% стоимости — это видеокарты. Поэтому на собесах сейчас спрашивают не про красивые промпты, а про жёсткую экономику агентов.
По сути, от вас ждут понимания, как лимитировать ресурсы на лету, роутить запросы и дебажить отказы через механизм
time-travel в LangGraph. Если вы до сих пор собираете ботов в ноутбуках, гляньте обновлённый курс «Разработка ИИ-агентов» — фокус там смещён с игрушечных концепций на суровый энтерпрайз.Что требуют от мидлов и выше:
— интеграция мультиагентных систем по стандарту
MCP;— суровый AgentOps: метрики, трейсинг, защита от деградации пайплайнов;
— локальный деплой Open Source под 152-ФЗ (без этого в финтех можно даже не стучаться).
Прямо сейчас можно урвать курс с увесистой скидкой
👉 Подтянуть архитектуру до уровня прода
😁1
MVC (Model-View-Controller) — это
▪️ Model (Модель) —
▪️ View (Представление) —
▪️ Controller (Контроллер) —
Этот подход упрощает сопровождение кода, позволяет разделить ответственность между слоями и облегчает тестирование.
#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1😁1
— Statement используется для
— PreparedStatement
Поэтому в реальных проектах почти всегда используют PreparedStatement.
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2👏1
Денормализация — это процесс
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2👏1
Это структура данных, основанная на
Основные моменты:
🔹 Хеширование:
🔹 Коллизии:
🔹 Динамическое расширение:
🔹 Балансировка дерева:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3😁1
ApplicationContext — это
Он является расширением
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1👏1
Memory leak, который живёт неделями и не воспроизводится локально 👇
📦 Задание — code review
Написали фильтр для аудита запросов. В продакшне через несколько дней — OutOfMemoryError.
@Component
public class AuditFilter implements Filter {
private static final ThreadLocal<AuditContext> CONTEXT =
new ThreadLocal<>();
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain
) throws IOException, ServletException {
AuditContext ctx = new AuditContext(
((HttpServletRequest) request).getRequestURI(),
System.currentTimeMillis()
);
CONTEXT.set(ctx);
try {
chain.doFilter(request, response);
} finally {
auditLog(CONTEXT.get());
}
}
public static AuditContext current() {
return CONTEXT.get();
}
private void auditLog(AuditContext ctx) {
// пишем в БД...
}
}
▪️ Объясни
— Почему объекты в ThreadLocal не собираются GC, даже если запрос завершён.
— Какая одна строчка кода здесь отсутствует, и где именно она должна быть.
* Есть ли риски при использовании ThreadLocal в virtual threads (Project Loom)?
Ставьте → 🔥, если нравится формат. Если нет → 🌚
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍4
😱 Если ваш продукт не умеет отдавать данные в формате, понятном AI-агенту, то вас просто не существует
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
MCP и A2A-взаимодействие, чтобы агенты могли вас читать;— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
🥱2❤1
Ежемесячный опрос по грейдам. Проверим, выросло ли число senior'ов.
Ваш грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35😁25❤16🔥12
volatile — это модификатор переменной, который гарантирует:
▪️
▪️
Использовать стоит, когда:
▪️
▪️
volatile не обеспечивает атомарности, поэтому для операций «чтение-модификация-запись» нужны синхронизация или атомарные типы (AtomicInteger, AtomicReference и т.п.).
#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5
IO (Input/Output) — это
NIO (New IO) был введён в JDK 1.4 для
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
DDD (Domain-Driven Design) — подход к проектированию, при котором структура кода отражает структуру бизнес-домена.
Основные строительные блоки
Entity —
Value Object —
Aggregate —
Domain Service —
Repository —
Domain Event —
Bounded Context —
#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥1
Идемпотентность означает, что
Способы реализации:
—
—
—
—
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥1
Код чистый, тесты быстрые, на реальных данных — pg_stat_activity в огне 👇
📦 Задание — code review
Ручка возвращает список заказов с информацией о товарах. Работает корректно, но DBA прибежал с графиком: каждый вызов делает тысячи запросов к БД.
@Entity
public class Order {
@Id
private Long id;
private Long userId;
private LocalDateTime createdAt;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "order")
private List<OrderItem> items;
}
@Entity
public class OrderItem {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Order order;
@ManyToOne(fetch = FetchType.LAZY)
private Product product;
private Integer quantity;
}
@RestController
@RequiredArgsConstructor
public class OrderController {
private final OrderRepository orderRepository;
@GetMapping("/orders")
public List<OrderDto> getOrders(@RequestParam Long userId) {
List<Order> orders = orderRepository.findByUserId(userId);
return orders.stream()
.map(order -> new OrderDto(
order.getId(),
order.getItems().stream()
.map(item -> new ItemDto(
item.getProduct().getName(),
item.getQuantity()
))
.toList()
))
.toList();
}
}
▪️ Объясни
— Точную механику N+1: где и сколько раз запросы уходят в БД в этом коде.
— Почему FetchType.EAGER «решит» проблему, но создаст другую.
— Как можно решить проблему.
Ставьте → 🔥, если нравится формат. Если нет → 🌚
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤4👍4
Текущий уровень сложности вопросов?
🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤13🔥7😁1
this — это
—
—
—
—
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1🔥1
Event-driven architecture — это когда компоненты
// Событие:
public record UserRegistered(User user) {}
// Listener:
@Component
public class SendWelcomeEmail {
@EventListener
public void handle(UserRegistered event) {
mailer.send(event.user().email(), "Welcome!");
}
}
// Публикация события:
applicationContext.publishEvent(new UserRegistered(user));
Зачем
В Spring
— ApplicationEventPublisher для публикации
— @EventListener для подписки
— @TransactionalEventListener — если нужно дождаться коммита транзакции
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥1
@Value
@Value("${app.name}")
private String appName;
@Value("${app.timeout:30}")
private int timeout; // 30 - default значение
@Value("#{systemProperties['user.name']}")
private String userName; // SpEL выражениеПоддерживает
— property placeholders ${...}
— SpEL выражения #{...}
— значения по умолчанию через ":"
Альтернатива для группы свойств: @ConfigurationProperties.
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1🔥1