Пятница, 19:00. Худшее время для деплоя, но идеальное, чтобы встроить LLM в архитектуру твоего Enterprise-проекта и заставить её работать с реальными данными.
Интеграция ИИ требует больше, чем просто вызов API. На открытом уроке обсудим, как обуздать нейронки на уровне системного проектирования.
Практическая часть занятия:
—
— инструменты:
— live coding: создание системы, отвечающей по базе документов.
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Урок предваряет курс «Разработка AI-агентов». Это техническое занятие для тех, кто планирует внедрять ИИ в реальные продукты.
Записаться на урок
Интеграция ИИ требует больше, чем просто вызов API. На открытом уроке обсудим, как обуздать нейронки на уровне системного проектирования.
Практическая часть занятия:
—
RAG vs Fine-tuning: выбор стратегии для крупных проектов;— инструменты:
LangChain, векторные индексы и их роль в пайплайне;— live coding: создание системы, отвечающей по базе документов.
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Урок предваряет курс «Разработка AI-агентов». Это техническое занятие для тех, кто планирует внедрять ИИ в реальные продукты.
Записаться на урок
🔧 HikariCP: детектирование утечек соединений в production
При работе с базой данных через HikariCP нередка ситуация, когда Connection не закрывается должным образом (забытый close(), исключение до finally блока). В production это приводит к исчерпанию пула и падению приложения с ошибкой "Connection is not available".
🔹 Решение
▪️ Включение leak detection через application.yml
▪️ Или программно через HikariConfig
При утечке в логах появится stacktrace места создания проблемного Connection. Значение 30000ms (30 сек) оптимально для большинства случаев - меньше даст false positive на долгих транзакциях, больше может пропустить реальные утечки.
⚠️ В production рекомендуется держать включенным постоянно, т.к. overhead минимален, а диагностика критична.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#Enterprise
При работе с базой данных через HikariCP нередка ситуация, когда Connection не закрывается должным образом (забытый close(), исключение до finally блока). В production это приводит к исчерпанию пула и падению приложения с ошибкой "Connection is not available".
🔹 Решение
▪️ Включение leak detection через application.yml
spring:
datasource:
hikari:
leak-detection-threshold: 30000
max-lifetime: 600000
connection-timeout: 20000
▪️ Или программно через HikariConfig
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcUrl);
config.setUsername(username);
config.setPassword(password);
config.setLeakDetectionThreshold(30000); // 30 сек
config.setMaxLifetime(600000);
return new HikariDataSource(config);
}
При утечке в логах появится stacktrace места создания проблемного Connection. Значение 30000ms (30 сек) оптимально для большинства случаев - меньше даст false positive на долгих транзакциях, больше может пропустить реальные утечки.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥4👏2
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Напишите метод для production-кода 👇
📦 Задание
Реализуйте debouncer, который откладывает выполнение действия пока события продолжают поступать:
public class Debouncer {
public Debouncer(long delayMs) {
// Ваш код здесь
}
public void call(Runnable action) {
// Ваш код здесь
// Если вызов повторяется до истечения delayMs
// - отменить предыдущий и запланировать новый
// Выполнить только когда delayMs прошло без новых вызовов
}
}🔹 Требования
— Выполнять action только если delayMs прошло без новых вызовов
— Каждый новый call() отменяет предыдущий таймер
— Использовать ScheduledExecutorService
— Потокобезопасность
🔹 Пример:
Debouncer debouncer = new Debouncer(300); // 300ms
debouncer.call(() -> search(query)); // откладываем
debouncer.call(() -> search(query)); // отменяем предыдущий
debouncer.call(() -> search(query)); // отменяем предыдущий
// Через 300ms выполнится только последний
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍3👏1
Бэклог растёт, а ты всё ещё вручную «жаришь» бойлерплейт и промпты?
Это работа в забегаловке. Настоящий Шеф не сидит в отладке вечно — он проектирует Систему. ☕
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать автономные архитектуры, которые закроют бизнес-задачи, пока ты занимаешься проектированием.
В программе:
— мультиагентные системы в
— сложная логика в
—
Записаться на курс
Это работа в забегаловке. Настоящий Шеф не сидит в отладке вечно — он проектирует Систему. ☕
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать автономные архитектуры, которые закроют бизнес-задачи, пока ты занимаешься проектированием.
В программе:
— мультиагентные системы в
CrewAI: делегирование рутины и контроль исполнения;— сложная логика в
LangGraph: управление состоянием в сложных графах;—
tool use интеграция: обучение агентов работе с твоим энтерпрайз-стеком. 🏗️Записаться на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
😁37💯5❤1🔥1
Завтра стартуем: курс по разработке ИИ-агентов в Enterprise ☕
Хватит вручную прописывать логику под каждый запрос — внедряйте автономные системы. Мы научим проектировать агентные связки на
👉 Успейте занять место до начала занятий
Хватит вручную прописывать логику под каждый запрос — внедряйте автономные системы. Мы научим проектировать агентные связки на
CrewAI, управлять графами в LangGraph и интегрировать ИИ с вашим корпоративным стеком.👉 Успейте занять место до начала занятий
Нужно быстро протестировать Stream API, проверить регулярку или набросать алгоритм? Создавать временный класс в проекте — оверкилл. Для этого есть Scratch Files.
🔹 Что это
Временные файлы с полной поддержкой языка: подсветка, автокомплит, запуск кода. Живут в IDE, но не в проекте. Не попадают в Git, не захламляют структуру.
🔹 Как создать
— Ctrl+Shift+Alt+Insert → Scratch File.
— File → New → Scratch File.
— Или Ctrl+Shift+A → "New Scratch File".
🔹 Два типа
Scratch Files — файлы с конкретным языком (Java, Kotlin, SQL, JSON). Поддерживают автокомплит и выполнение.
Scratch Buffers — простой текст для заметок и TODO.
🔹 Зачем это нужно
— Тестируешь алгоритм без создания Test класса.
— Прототипируешь SQL перед добавлением в JPA.
— Сохраняешь сниппеты со Stack Overflow.
— Отлаживаешь регулярки, парсинг JSON, работу с датами.
Особенно полезно при рефакторинге: копируешь сложную логику в scratch, тестируешь варианты упрощения, не трогая основной код.
🔹 Фишки
— Автосохранение между перезапусками IDE.
— Запуск кода: Ctrl+Shift+F10 для Java/Kotlin.
— Все файлы в одном месте: Project view → Scratches and Consoles.
— Хранятся локально в ~/.config/JetBrains/, не в проекте.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥7👏1👾1
AI-агенты в Enterprise: внедряем автономность в Java-стек
Корпорации активно переходят на AI-автоматизацию. Знание принципов работы агентов станет вашим преимуществом при проектировании сложных систем.
Сегодня в 19:00 МСК стартует курс «Углубленные AI-агенты».
Учебный план:
— мультиагентные системы для бизнес-задач;
— интеграция с базами данных и внешними API;
— проектирование надёжных и масштабируемых ИИ-решений;
— основы
Стать AI-архитектором
Корпорации активно переходят на AI-автоматизацию. Знание принципов работы агентов станет вашим преимуществом при проектировании сложных систем.
Сегодня в 19:00 МСК стартует курс «Углубленные AI-агенты».
Учебный план:
— мультиагентные системы для бизнес-задач;
— интеграция с базами данных и внешними API;
— проектирование надёжных и масштабируемых ИИ-решений;
— основы
LLM архитектуры для архитекторов.Стать AI-архитектором
😁1
🎯 Перестань использовать new ArrayList<>() везде
❌ Было:
✔️ Стало (Java 9+):
🔹 Почему лучше:
→ Immutable по умолчанию — меньше багов
→ Компактнее в памяти (нет capacity overhead)
→ Читается как данные, а не как инструкции
→ Если нужна мутабельность:
Явно показываем намерение изменять список.
⚠️ Bonus:
javaMap.of("key1", "value1", "key2", "value2")
Set.of("a", "b", "c")
Работает для Map и Set тоже.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#Enterprise
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
return names;
return List.of("Alice", "Bob", "Charlie");🔹 Почему лучше:
→ Immutable по умолчанию — меньше багов
→ Компактнее в памяти (нет capacity overhead)
→ Читается как данные, а не как инструкции
→ Если нужна мутабельность:
var names = new ArrayList<>(
List.of("Alice", "Bob", "Charlie")
);
Явно показываем намерение изменять список.
javaMap.of("key1", "value1", "key2", "value2")
Set.of("a", "b", "c")
Работает для Map и Set тоже.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱5🔥3😢3👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36💯4🔥1
Давайте разберем три принципиально разных подхода к многопоточности и посмотрим, к чему они приводят на практике.
▪️ Суть: один OS-поток на процесс. Runtime сам переключает контекст между задачами.
В CPython есть GIL (Global Interpreter Lock) — мьютекс, который позволяет выполнять байткод только одному потоку за раз. Это сделано для упрощения управления памятью через reference counting. В JavaScript модель изначально однопоточная — event loop обрабатывает задачи последовательно.
▪️Что это значит на практике
— Один инстанс сервиса = одно ядро процессора.
— Для использования 16 ядер нужно запустить 16 процессов + балансировщик.
— Потоки в Python/JS — это логическая абстракция, не настоящие OS threads.
— Для CPU-intensive задач в Python используют multiprocessing (отдельные процессы с изолированной памятью).
— Простой код без race conditions и deadlocks.
— Не нужны сложные примитивы синхронизации.
— Идеально для I/O-bound нагрузки (сеть, БД).
— Усложненная инфраструктура (больше процессов, межпроцессное взаимодействие через очереди/БД).
— Процессы изолированы — нет shared memory.
— Сложнее использовать многоядерность.
▪️ Суть: 1:1 mapping между Java Thread и OS thread. Планировщик ОС управляет всеми потоками.
Когда вы создаете new Thread() в классической Java, вы напрямую создаете OS thread. Все потоки конкурируют за CPU время через планировщик ОС. У каждого потока ~1 МБ стека.
▪️ Что это значит на практике
— Ограничение на количество потоков (~тысячи, не миллионы).
— Создание потока дорогая операция (~1ms).
— Context switch происходит в kernel space (затратно).
— Поэтому появились thread pools, чтобы переиспользовать потоки.
— Простая инфраструктура — один процесс использует все ядра.
— Shared memory между потоками (быстрый обмен данными).
— Race conditions, deadlocks, visibility/atomicity проблемы.
— Многопоточный код сложен в тестировании и отладке.
— Ограничение на количество потоков может стать узким местом даже при незагруженном CPU.
▪️ Суть: M:N mapping. Runtime сам мультиплексирует легковесные потоки на OS threads.
В Go это goroutines (управляются Go runtime через GMP-планировщик). В Java 21+ — Virtual Threads (Project Loom). Оба подхода реализуют концепцию green threads или user-level threads.
▪️ Механизм работы
Virtual Threads поверх ForkJoinPool.
— JVM создает carrier threads (platform threads).
— Виртуальные потоки привязываются/отвязываются от carrier threads.
— При блокирующей операции виртуальный поток отвязывается, carrier thread берет другой виртуальный поток.
— Стеки virtual threads хранятся в heap, управляются GC.
▪️Что это значит на практике
— Можно создавать миллионы потоков (в Go — goroutines, в Java — виртуальные потоки).
— Создание потока почти бесплатно (байты памяти вместо мегабайт).
— Блокирующий код работает эффективно — runtime просто переключает контекст на другую задачу.
— Планировщик делает принудительное переключение, предотвращая монополизацию CPU.
— Нет лимита на количество одновременных задач.
— Простой императивный код вместо async/reactive.
— Shared memory все еще доступна.
— Эффективное использование ресурсов.
— Проблемы многопоточности остаются (race conditions, deadlocks).
— В Java есть pinning проблема (synchronized блоки могут прибить virtual thread к carrier thread).
— Thread-local переменные нужно использовать осторожно.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3🤔2
Думаете, Kotlin идеально сочетается с JPA? А вот и нет!
data class, val, final-классы и даже дефолтные значения — всё это может тихо саботировать вашу персистентность.
→ Почему data-классы — плохая идея для entity
→ Как val ломает контракт JPA (но работает... пока)
→ Почему первичный ключ должен быть nullable
→ Как правильно настроить проект с плагинами no-arg и all-open
Не наступайте на грабли — читайте, пока не поздно
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥1
Java Developer (Middle) — 200 000 — 250 000 ₽ — удалёнка
Middle / Senior Java Developer — офис/гибрид (Москва)
Java Developer (Middle / Senior) — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3👍2🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24💯4👍2
Enterprise AI: внедряем агентов в сложные бизнес-системы
Для Java-разработчика ИИ-агенты — это новый этап автоматизации процессов. Поймите, как проектировать автономные модули, которые могут быть интегрированы в общую корпоративную архитектуру.
Курс «Углубленные AI-агенты» даст вам фундаментальную базу.
Чему мы научим:
— проектирование мультиагентных структур и связей;
— работа с актуальными фреймворками
— использование RAG-систем для работы с данными;
— оркестрация и масштабирование ИИ-решений.
Курс уже стартовал, успейте присоединиться к группе.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.
Для Java-разработчика ИИ-агенты — это новый этап автоматизации процессов. Поймите, как проектировать автономные модули, которые могут быть интегрированы в общую корпоративную архитектуру.
Курс «Углубленные AI-агенты» даст вам фундаментальную базу.
Чему мы научим:
— проектирование мультиагентных структур и связей;
— работа с актуальными фреймворками
CrewAI и LangGraph;— использование RAG-систем для работы с данными;
— оркестрация и масштабирование ИИ-решений.
Курс уже стартовал, успейте присоединиться к группе.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.
❤1😁1
Нужно быстро набросать сервис для бизнес-функции? AI поможет сэкономить часы на шаблонах, валидации и boilerplate.
📝 Промпт:
Generate a Spring Boot REST endpoint that handles [описание бизнес-логики]. Include request/response DTOs, validation, exception handling, and service-layer interaction. Use best practices and explain design decisions.
— Добавьте
Use Java 17+ features if possible, чтобы сразу писать современно— Добавьте
Add unit tests for controller and service, чтобы не откладывать на потом— Добавьте
Make it modular for future feature extension, если планируется масштабирование══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁4❤2🔥1
🎯 Перестань инжектить зависимости через @Autowired на полях
❌ Было:
✔️ Стало:
🔹 Почему лучше
→ Immutable зависимости — объект полностью сконфигурирован после создания
→ Тестируемость — можно создать объект без Spring контекста.
→ Явные зависимости — видно сразу, если класс раздулся (5+ зависимостей = запах)
→ Null-safety — final поля гарантируют инициализацию
→ Рефлексия не нужна — Spring использует обычный конструктор
📌 Когда field injection допустим
→ @Value для примитивных конфигов
→ Тестовые классы с @MockBean
Но для основной бизнес-логики — только constructor injection.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#Enterprise
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private EmailService emailService;
@Autowired
private ValidationService validationService;
}
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final EmailService emailService;
private final ValidationService validationService;
}
🔹 Почему лучше
→ Immutable зависимости — объект полностью сконфигурирован после создания
→ Тестируемость — можно создать объект без Spring контекста.
→ Явные зависимости — видно сразу, если класс раздулся (5+ зависимостей = запах)
→ Null-safety — final поля гарантируют инициализацию
→ Рефлексия не нужна — Spring использует обычный конструктор
📌 Когда field injection допустим
→ @Value для примитивных конфигов
→ Тестовые классы с @MockBean
Но для основной бизнес-логики — только constructor injection.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2👏2🥱2❤1
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом запуска?
Anonymous Quiz
24%
Ошибка компиляции
2%
10 10
11%
20 20
58%
20 10
5%
Посмотреть ответ
😁7👍2🥱2🔥1🌚1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29💯5🔥3
State Machine Pattern для AI-агентов
Джависты знают: сложная бизнес-логика требует управления состоянием. В мире LLM хаос
Зачем это в Enterprise:
— предсказуемость: вы жёстко задаёте граф переходов;
— persistence: состояние агента можно сохранить в БД (Postgres) и восстановить при падении;
— type safety: контроль структуры данных между шагами.
Курс по архитектуре агентов уже стартовал.
Записаться на курс
Сомневаетесь? Гляньте первую лекцию — там база про устройство современных агентов.
Джависты знают: сложная бизнес-логика требует управления состоянием. В мире LLM хаос
LangChain сменился строгой структурой LangGraph. По сути, это реализация Finite State Machine, где переходы определяет нейросеть.Зачем это в Enterprise:
— предсказуемость: вы жёстко задаёте граф переходов;
— persistence: состояние агента можно сохранить в БД (Postgres) и восстановить при падении;
— type safety: контроль структуры данных между шагами.
Курс по архитектуре агентов уже стартовал.
Записаться на курс
Сомневаетесь? Гляньте первую лекцию — там база про устройство современных агентов.
❤10