Junior Backend Developer — от 120 000 до 200 000 ₽ — гибрид (Москва)
JAVA-разработчик — от 170 000 ₽ — удалёнка
Senior Java Developer — от 320 000 ₽ — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
👏2❤1👍1
Анна Жаркова, лид мобильной разработки ГК «Юзтех», выступила на конференции с докладом о том, как Swift и Kotlin учатся говорить друг с другом, и что из этого выходит на практике.
В докладе:
🔹 прямой экспорт Kotlin/Native в Swift от JetBrains и что это меняет для кроссплатформенной разработки;
🔹 инструмент SwiftJava от Apple — конвертация кода между языками без KMP;
🔹 как и когда использовать каждое из решений в реальных iOS и Android-приложениях;
🔹 натив vs кроссплатформа: плюсы, минусы и лучшие практики.
🎬 Смотреть
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👏2👍1🔥1
🔥 Строишь ИИ-агентов? Руководитель AI/ML-направления Сloud․ru покажет, где большинство архитектур ломаются, и как этого избежать.
18 июня в 19:00 совместно с Сloud․ru проведём открытый урок «Мультиагентные системы: почему большинство архитектур переусложнены».
Спикер — Дмитрий Юдин, эксперт по масштабированию и оптимизации вычислительных ресурсов для ML. Под его руководством развивается Evolution AI Factory — цифровая среда для работы с GenAI. Он занимается развитием сервисов генеративного ИИ, инфраструктуры для обучения больших языковых моделей и внедрением интеллектуальных агентов.
Что получишь на уроке:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
🎁 Для участников урока подготовили промокод на скидку 10 000 ₽.
🗓️ Когда: 18 июня, 19:00 (МСК)
👉 Занять место на открытом уроке
18 июня в 19:00 совместно с Сloud․ru проведём открытый урок «Мультиагентные системы: почему большинство архитектур переусложнены».
Спикер — Дмитрий Юдин, эксперт по масштабированию и оптимизации вычислительных ресурсов для ML. Под его руководством развивается Evolution AI Factory — цифровая среда для работы с GenAI. Он занимается развитием сервисов генеративного ИИ, инфраструктуры для обучения больших языковых моделей и внедрением интеллектуальных агентов.
Что получишь на уроке:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
🎁 Для участников урока подготовили промокод на скидку 10 000 ₽.
🗓️ Когда: 18 июня, 19:00 (МСК)
👉 Занять место на открытом уроке
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👾4👏2
🗃 Transactional Outbox: как не потерять событие между БД и брокером
Классическая ситуация: в одном запросе надо сохранить заказ в БД и отправить OrderCreated в Kafka. Выглядит элементарно:
Но это dual write — два независимых внешних действия без общей транзакции. И любой сбой ломает консистентность:
▪️ БД закоммитилась, приложение упало до отправки → событие потеряно, соседние сервисы не узнали о заказе
▪️ Событие ушло, а транзакция откатилась → фантомное событие про заказ, которого нет
▪️ Распределённые транзакции (2PC/XA) тут — дорога в ад: медленно, хрупко, Kafka их толком не тянет.
📌 Идея паттерна
Не пишем в брокер напрямую. В той же транзакции БД, что и бизнес-данные, кладём событие в табличку outbox:
Обе вставки в одной локальной транзакции → они атомарны. Либо есть и заказ, и событие, либо ничего. Dual write исчезает: остаётся один источник правды.
🔍 Кто доставляет в Kafka?
Отдельный процесс — message relay. Два подхода:
1️⃣ Polling Publisher — фоновый воркер периодически читает новые строки из outbox, шлёт в брокер, помечает отправленными (или удаляет). Просто и прозрачно, но есть лаг поллинга и нагрузка на БД.
2️⃣ CDC (Debezium) — читаем не таблицу, а WAL/binlog базы. Debezium ловит инсерты в outbox и стримит почти в реалтайме. Сложнее в инфре, зато без поллинга и лишних запросов.
Outbox превращает ненадёжный dual write в один атомарный коммит + асинхронную доставку. Платите за это дубликатами (лечатся идемпотентностью) и eventual consistency.
Классическая ситуация: в одном запросе надо сохранить заказ в БД и отправить OrderCreated в Kafka. Выглядит элементарно:
orderRepository.save(order);
kafkaTemplate.send("orders", event); // 💥
Но это dual write — два независимых внешних действия без общей транзакции. И любой сбой ломает консистентность:
▪️ БД закоммитилась, приложение упало до отправки → событие потеряно, соседние сервисы не узнали о заказе
▪️ Событие ушло, а транзакция откатилась → фантомное событие про заказ, которого нет
▪️ Распределённые транзакции (2PC/XA) тут — дорога в ад: медленно, хрупко, Kafka их толком не тянет.
Не пишем в брокер напрямую. В той же транзакции БД, что и бизнес-данные, кладём событие в табличку outbox:
INSERT INTO orders (...);
INSERT INTO outbox (id, aggregate, type, payload, created_at) (...);
COMMIT;
Обе вставки в одной локальной транзакции → они атомарны. Либо есть и заказ, и событие, либо ничего. Dual write исчезает: остаётся один источник правды.
Отдельный процесс — message relay. Два подхода:
Outbox превращает ненадёжный dual write в один атомарный коммит + асинхронную доставку. Платите за это дубликатами (лечатся идемпотентностью) и eventual consistency.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥6❤5
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию
Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.
Одно направление закрывает только часть задачи.
Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥
Собери стек навыков под свою цель:
🔹 подготовка к сильным компаниям (алгоритмы, архитектура);
🔹 переход в AI-направление (ИИ-агенты, AgentOps);
🔹 развитие в ML и Data Science (математика, основы ML);
🔹 новый оффер и рост дохода.
Полученные знания применяешь в работе уже во время обучения.
⏳ Акция действует 48 часов — 13 и 14 июня.
👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.
Одно направление закрывает только часть задачи.
Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥
Собери стек навыков под свою цель:
🔹 подготовка к сильным компаниям (алгоритмы, архитектура);
🔹 переход в AI-направление (ИИ-агенты, AgentOps);
🔹 развитие в ML и Data Science (математика, основы ML);
🔹 новый оффер и рост дохода.
Полученные знания применяешь в работе уже во время обучения.
⏳ Акция действует 48 часов — 13 и 14 июня.
👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Наш подписчик прислал реальную задачу с собеса в Яндекс. Сможете решить? 👇
📦 Задание
Реализуйте банкомат и тесты к нему. Инициализируется набором купюр, умеет выдавать купюры под заданную сумму либо отвечать отказом. При выдаче купюры списываются с баланса.
/**
* Банкомат.
* Инициализируется набором купюр, выдаёт купюры под сумму либо отказывает.
* При выдаче купюры списываются с баланса.
*
* Номиналы:
* - 50, 100, 500, 1000, 5000 ₽
* - 20, 100, 500 EUR
*
* Валюты обрабатываются раздельно, обмен не поддерживается.
* Банкомат может использоваться многопоточно (резервирование выдачи).
* Поддержку многопоточности можно вынести в отдельную итерацию.
*/
public class ATM {
public ??? withdraw(???) {
// TODO
}
}
📋 Требования
— Сами определите, что withdraw принимает и что возвращает.
— Валюты считаются раздельно, обмена нет.
— Сумму, которую нельзя собрать имеющимися купюрами, отклоняем (частичная выдача недопустима).
— Покройте решение тестами.
— Бонус: сделайте безопасным для вызова из нескольких потоков.
Ставьте → 🔥, если нравится формат. Если нет → 🌚
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤4👍2👏1
🎥 До открытого урока — несколько дней. Подготовили небольшую подборку материалов от нашего спикера Дмитрия Юдина.
Дмитрий руководит AI/ML-направлением в Сloud․ru и развивает Evolution AI Factory — среду для работы с GenAI: от инфраструктуры обучения LLM до внедрения интеллектуальных агентов.
С чего начать:
📺 AI-инструменты для разработчиков — как код, автотесты и ассистенты меняют рутину инженера.
📺 AI-эволюция бизнеса в эпоху генеративных моделей — агентные системы в реальных продуктах.
📺 Разработка мертва? — дискуссия о будущем профессии и роли AI в ней.
📖 Применение LLM в бизнесе — статья Дмитрия о практике внедрения и роли облака.
Одна из ключевых тем Дмитрия — практическое применение агентных систем и их ограничения.
Именно об этом — бесплатный урок 18 июня в 19:00: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥
🎁 Для участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».
👉 Успей занять место на открытом уроке
Дмитрий руководит AI/ML-направлением в Сloud․ru и развивает Evolution AI Factory — среду для работы с GenAI: от инфраструктуры обучения LLM до внедрения интеллектуальных агентов.
С чего начать:
📺 AI-инструменты для разработчиков — как код, автотесты и ассистенты меняют рутину инженера.
📺 AI-эволюция бизнеса в эпоху генеративных моделей — агентные системы в реальных продуктах.
📺 Разработка мертва? — дискуссия о будущем профессии и роли AI в ней.
📖 Применение LLM в бизнесе — статья Дмитрия о практике внедрения и роли облака.
Одна из ключевых тем Дмитрия — практическое применение агентных систем и их ограничения.
Именно об этом — бесплатный урок 18 июня в 19:00: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥
🎁 Для участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».
👉 Успей занять место на открытом уроке
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👾4👍1
Логи сервера в plain text, нужно быстро подсчитать количество запросов по HTTP-статусам? awk — ваш Swiss Army Knife для обработки текстовых данных прямо в терминале.
🔹 Зачем это нужно
— Мгновенная агрегация данных из логов без загрузки в БД или Python.
— Работает с любым текстовым форматом.
— Есть на каждом сервере.
🔹 Как использовать
— Подсчёт по статусам (nginx access.log):
awk '{print $9}' access.log | sort | uniq -c | sort -rn— Среднее время ответа:
awk '{sum+=$NF; n++} END {print sum/n}' access.log— Только 5xx ошибки:
awk '$9 ~ /^5/' access.log— Топ-10 IP по количеству запросов:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10— Вывести конкретные поля:
awk -F',' '{print $1, $3}' data.csv═══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2❤1👏1
🪤 «Потом отрефакторим» = «никогда»
Разраб с 5+ годами опыта собрал 5 вещей, которые он хотел бы услышать в свой первый год, но услышал гораздо позже и гораздо дороже.
Казалось бы, материал для джунов. Но самое неприятное в том, что половину пунктов мидлы и сеньоры узнают как свои текущие грабли, а не как воспоминание:
— тот самый общий модуль, который «у всех меняется одинаково»
— ревью в стиле «так писать нельзя» без единого «почему»
— почему бесполезные тесты хуже, чем их отсутствие
Без занудства и пафоса, на живых рабочих историях (включая ту, где «красивое ТЗ с картинками» оказалось указано не на тот участок проекта).
Хороший повод сверить часы: что из этого вы уже передаёте своим джунам, а что всё ещё откладываете сами.
🔗 Подробнее
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava
Разраб с 5+ годами опыта собрал 5 вещей, которые он хотел бы услышать в свой первый год, но услышал гораздо позже и гораздо дороже.
Казалось бы, материал для джунов. Но самое неприятное в том, что половину пунктов мидлы и сеньоры узнают как свои текущие грабли, а не как воспоминание:
— тот самый общий модуль, который «у всех меняется одинаково»
— ревью в стиле «так писать нельзя» без единого «почему»
— почему бесполезные тесты хуже, чем их отсутствие
Без занудства и пафоса, на живых рабочих историях (включая ту, где «красивое ТЗ с картинками» оказалось указано не на тот участок проекта).
Хороший повод сверить часы: что из этого вы уже передаёте своим джунам, а что всё ещё откладываете сами.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2👍1👾1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16🔥6💯5😢1👾1
👾 Collectors.toMap падает там, где HashMap.put молчит
Привычка к map.put() подводит при переходе на стримы:
Здесь сразу две мины:
1. Дубликаты ключей → IllegalStateException. Map.put тихо перезаписал бы значение, а toMap без merge-функции бросает «Duplicate key». Фикс — третий аргумент:
2. null в значении → NullPointerException. Под капотом toMap использует Map.merge, который по контракту не допускает null-значение. HashMap сам по себе null-значения разрешает, поэтому баг ловится не на ровной коллекции, а на «редких» данных в проде:
Если значение может быть null, собирай вручную в HashMap через forEach/reduce или фильтруй заранее. Стоит держать в голове: toMap строже, чем тот Map, который он создаёт.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava
Привычка к map.put() подводит при переходе на стримы:
Map<String, User> byEmail = users.stream()
.collect(Collectors.toMap(User::email, u -> u));
Здесь сразу две мины:
1. Дубликаты ключей → IllegalStateException. Map.put тихо перезаписал бы значение, а toMap без merge-функции бросает «Duplicate key». Фикс — третий аргумент:
.collect(Collectors.toMap(User::email, u -> u, (a, b) -> b)); // оставить последний
2. null в значении → NullPointerException. Под капотом toMap использует Map.merge, который по контракту не допускает null-значение. HashMap сам по себе null-значения разрешает, поэтому баг ловится не на ровной коллекции, а на «редких» данных в проде:
.collect(Collectors.toMap(User::email, User::nickname)); // nickname == null -> NPE
Если значение может быть null, собирай вручную в HashMap через forEach/reduce или фильтруй заранее. Стоит держать в голове: toMap строже, чем тот Map, который он создаёт.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥1
Forwarded from Библиотека задач по Java | тесты, код, задания
Бин помечен @Profile("!prod"). Когда он НЕ будет создан?
Anonymous Quiz
42%
Когда активен профиль dev
41%
Когда активен профиль prod
8%
Когда не активен ни один профиль
9%
Посмотреть ответ
😁8👍2❤1🔥1
⏰ Уже сегодня в 19:00 (МСК) стартует открытый урок!
Тема:
🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа.
Поговорим о критериях выбора архитектуры, типичных ошибках и ограничениях современных ИИ-агентов, которые важно учитывать ещё до внедрения в продукт.
🎙️ Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru.
🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».
👉 Успей присоединиться к уроку
Тема:
«Мультиагентные системы: почему большинство архитектур переусложнены»
🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа.
Поговорим о критериях выбора архитектуры, типичных ошибках и ограничениях современных ИИ-агентов, которые важно учитывать ещё до внедрения в продукт.
🎙️ Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru.
🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».
👉 Успей присоединиться к уроку
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16💯7🔥3❤1
Java Developer — удалёнка/Гибрид (Санкт-Петербург) — VIGO
Java-разработчик — удалёнка — Стратосфера
Java разработчик — удалёнка — CPS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1😁1
🤖 Используешь AI для написания кода? В Яндексе покажут, как применять AI для реальных задач разработки.
23 июня в 19:00 совместно с Яндексом проведём открытый урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft. Более 18 лет развивала инструменты для разработчиков в JetBrains и руководила разработкой IDE в Huawei.
Что получишь на уроке:
— поймёшь, как использовать AI-ассистентов и облачных агентов в работе;
— научишься быстрее разбираться в новых проектах и кодовой базе;
— узнаешь, какие задачи стоит отдавать AI и как получать качественный результат;
— увидишь полный workflow работы с AI: от постановки задачи до код-ревью.
На уроке — живой разбор реального проекта с кодом. Ольга покажет промпты из рабочих сценариев и ответит на ваши вопросы в Q&A.
⚠️ Количество мест ограничено
🗓️ Когда: 23 июня, 19:00 (МСК)
👉 Занять место на открытом уроке
23 июня в 19:00 совместно с Яндексом проведём открытый урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft. Более 18 лет развивала инструменты для разработчиков в JetBrains и руководила разработкой IDE в Huawei.
Что получишь на уроке:
— поймёшь, как использовать AI-ассистентов и облачных агентов в работе;
— научишься быстрее разбираться в новых проектах и кодовой базе;
— узнаешь, какие задачи стоит отдавать AI и как получать качественный результат;
— увидишь полный workflow работы с AI: от постановки задачи до код-ревью.
На уроке — живой разбор реального проекта с кодом. Ольга покажет промпты из рабочих сценариев и ответит на ваши вопросы в Q&A.
⚠️ Количество мест ограничено
🗓️ Когда: 23 июня, 19:00 (МСК)
👉 Занять место на открытом уроке
🐘 Магия PostgreSQL
Таблица разрослась до десятков гигабайт, но данных в ней на пару гигов после массовых DELETE? VACUUM FULL перепишет таблицу и вернёт место на диск. Но есть нюансы.
🔹 Зачем это нужно
— PostgreSQL при DELETE не освобождает место на диске, а помечает строки как мёртвые.
— Обычный VACUUM чистит мёртвые строки для переиспользования, но файл не уменьшает.
— VACUUM FULL физически переписывает таблицу, реально освобождает место.
🔹 Как использовать
— Проверить «раздутие»:
— Мёртвые строки:
— Обычный VACUUM:
— Полная перезапись:
— Обновить статистику:
💡 VACUUM FULL берёт эксклюзивный лок — таблица полностью недоступна. На проде используйте pg_repack, он делает то же самое, но без блокировки. Ставится как расширение: CREATE EXTENSION pg_repack;
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#Enterprise
Таблица разрослась до десятков гигабайт, но данных в ней на пару гигов после массовых DELETE? VACUUM FULL перепишет таблицу и вернёт место на диск. Но есть нюансы.
🔹 Зачем это нужно
— PostgreSQL при DELETE не освобождает место на диске, а помечает строки как мёртвые.
— Обычный VACUUM чистит мёртвые строки для переиспользования, но файл не уменьшает.
— VACUUM FULL физически переписывает таблицу, реально освобождает место.
🔹 Как использовать
— Проверить «раздутие»:
SELECT pg_size_pretty(pg_total_relation_size('my_table'));— Мёртвые строки:
SELECT n_dead_tup, n_live_tup FROM pg_stat_user_tables WHERE relname = 'my_table';— Обычный VACUUM:
VACUUM VERBOSE my_table; (не блокирует таблицу)— Полная перезапись:
VACUUM FULL my_table; (⚠️ блокирует таблицу полностью!)— Обновить статистику:
ANALYZE my_table;══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2❤🔥1👏1
🤖 Мы тут подготовили небольшую игру по ИИ-агентам
В ней нужно собрать AI-агента на LangGraph: выбрать узлы, пройти развилки и запустить собственный workflow.
Никакой теории — сразу практика. Можно наглядно увидеть, как работают агентные системы, проверьте свои знания или показать другим как это всё работает 🔥
🎁 За прохождение получите персональную скидку на курс. Чем больше баллов наберете — тем больше будет скидка.
Плюс сейчас действует предложение: покупаешь 1 курс, получаешь еще 2 любых в подарок. Для этого надо будет оставить заявку на сайте академии после прохождения игры.
🚀 Собрать своего AI-агента
В ней нужно собрать AI-агента на LangGraph: выбрать узлы, пройти развилки и запустить собственный workflow.
Никакой теории — сразу практика. Можно наглядно увидеть, как работают агентные системы, проверьте свои знания или показать другим как это всё работает 🔥
🎁 За прохождение получите персональную скидку на курс. Чем больше баллов наберете — тем больше будет скидка.
Плюс сейчас действует предложение: покупаешь 1 курс, получаешь еще 2 любых в подарок. Для этого надо будет оставить заявку на сайте академии после прохождения игры.
🚀 Собрать своего AI-агента
❤1