ru
Feedback
Java Portal | Программирование

Java Portal | Программирование

Открыть в Telegram

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Больше

📈 Аналитический обзор Telegram-канала Java Portal | Программирование

Канал Java Portal | Программирование (@java_iibrary) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 12 121 подписчиков, занимая 10 397 место в категории Технологии и приложения и 54 492 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 12 121 подписчиков.

Согласно последним данным от 08 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -138, а за последние 24 часа — -5, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 11.21%. В первые 24 часа после публикации контент обычно набирает 6.34% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 1 360 просмотров. В течение первых суток публикация набирает 769 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 4.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как boot, string, void, архитектура, resttemplate.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Благодаря высокой частоте обновлений (последние данные получены 09 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

12 121
Подписчики
-524 часа
-307 дней
-13830 день
Архив постов
Вот суть работы HashMap: Сначала вызывается hashCode(), чтобы определить, в какой бакет попадёт ключ. Внутри бакета вызываетс
Вот суть работы HashMap: Сначала вызывается hashCode(), чтобы определить, в какой бакет попадёт ключ. Внутри бакета вызывается equals(), чтобы проверить, есть ли уже такой ключ. Если переопределить только equals(), но оставить дефолтный hashCode() (по адресу в памяти), получится проблема. Два объекта, которые равны по equals(), могут иметь разные хэши. Тогда они попадут в разные бакеты, и HashMap воспримет их как разные ключи. Итог: поиск по ключу может “ломаться”, значения будут “теряться”, а одинаковые по смыслу ключи могут храниться дублирующимися. Поэтому существует контракт: если объекты равны по equals(), они обязаны возвращать одинаковый hashCode(). В противном случае любые коллекции на основе хэшей (HashMap, HashSet, Hashtable) будут вести себя неправильно. 👉 Вывод прост. Всегда переопределяй equals() и hashCode() вместе. 👉 Java Portal

Дорожная карта по Spring Framework 🔸Prerequisites • Java Fundamentals. ООП, коллекции, обработка исключений • Maven и Gradle. Сборка и управление зависимостями • XML и Annotations. Форматы конфигурации • Basic SQL. • JDBC. Драйверы и соединения • HTTP и Web Basics. REST, JSON, базовые протоколы 🔸Spring Core • Inversion of Control. Базовый принцип Spring • Dependency Injection. Конструктор, сеттер, field injection • Application Context. Контейнер и управление бинами • Bean Lifecycle. Инициализация и уничтожение • Bean Scopes. Singleton, prototype, request, session • Configuration. XML, Java-config, аннотации 🔸Core Annotations • @Component. Базовый компонент • @Service. Слой бизнес-логики • @Repository. Доступ к данным • @Controller. Обработка запросов • @Autowired. Внедрение зависимостей • @Configuration. Классы конфигурации • @Bean. Определение бина 🔸Spring Boot Basics • Auto-Configuration. Автонастройка на зависимостях • Spring Boot Starters. Преднастроенные наборы • Application Properties. properties и YAML • @SpringBootApplication. Точка входа • Embedded Servers. Tomcat, Jetty, Undertow • Spring Boot CLI. Инструмент командной строки 🔸Spring Web MVC • DispatcherServlet. Фронт-контроллер • @RequestMapping. Маршруты • @GetMapping и @PostMapping. HTTP-хендлеры • @RequestParam. Параметры запроса • @PathVariable. Параметры пути • Model and View. Шаблоны MVC 🔸REST APIs • @RestController. Контроллер REST • @ResponseBody. Тело ответа • HTTP Status Codes. • Content Negotiation. Форматы JSON и XML • Exception Handling. @ControllerAdvice и обработчики • CORS. Политика совместного использования 🔸Spring Data JPA • JPA Entities. @Entity, @Table, @Id, аннотации • Repository Pattern. Интерфейсы доступа к данным • JpaRepository. CRUD-операции • Query Methods. Методы-запросы по имени • @Query Annotation. JPQL и нативные запросы • Relationships. @OneToMany, @ManyToOne, @ManyToMany • Pagination и Sorting. Параметры страниц и сортировки 🔸Spring Security • Authentication. Проверка пользователя • Authorization. Контроль доступа по ролям • Security Configuration. Фильтры и цепочка безопасности • Password Encoding. Энкодеры паролей • JWT Tokens. Статлес-аутентификация • OAuth2. Внешние провайдеры • Method Security. @PreAuthorize, @Secured 🔸Aspect-Oriented Programming • Cross-cutting Concerns. Логирование, безопасность, транзакции • @Aspect. Определение аспектов • Pointcuts. Точки среза • Advice Types. @Before, @After, @Around • JoinPoints. Места, куда вплетается аспект 🔸Testing • @SpringBootTest. Интеграционные тесты • @WebMvcTest. Тестирование веб-слоя • @DataJpaTest. Тестирование JPA • MockMvc. Тесты контроллеров без сервера • @MockBean. Заглушки в контексте Spring • TestRestTemplate. Тестирование REST 🔸Spring Actuator • Health Endpoints. Мониторинг состояния • Metrics. Метрики приложения • Custom Endpoints. Пользовательские эндпоинты • Info Endpoint. Информация о сборке • Environment Properties. Просмотр конфигурации 🔸Microservices • Spring Cloud. Набор для микросервисов • Service Discovery. Eureka и Consul • API Gateway. Spring Cloud Gateway • Circuit Breaker. Resilience4j и Hystrix • Configuration Server. Централизованная конфигурация • Distributed Tracing. Sleuth и Zipkin 🔸Advanced Topics • Reactive Programming. Project Reactor • Spring Native. Компиляция в native-image • Custom Auto-Configuration. Свои автоконфигурации • Event-Driven Architecture. Событийная модель • Caching. Абстракция кэширования • Profiles. Профили конфигураций 🔸Deployment • Docker Containerization. Образы и контейнеры • Kubernetes Deployment. Манифесты и Helm • Cloud Platforms. AWS, GCP, Azure • CI/CD Pipelines. Стратегии релизов • Production Monitoring. APM и наблюдаемость 🔸Best Practices • Project Structure. Слои и модульность • Configuration Management. Внешние конфиги • Error Handling. Глобальные обработчики • Logging. SLF4J и структурированные логи • Performance Optimization. Кэш, пул соединений, lazy-loading • Security Hardening. Настройки для продакшена 👉 Java Portal

⌨ Мок-интервью с ментором из Иннотеха, Сбера и других бигтехов за 900 рублей 👨‍💻Чтобы повысить грейд или получить оффер про
Мок-интервью с ментором из Иннотеха, Сбера и других бигтехов за 900 рублей 👨‍💻Чтобы повысить грейд или получить оффер просто хорошо работать работу не достаточно. Ты делаешь то, что нужно компании, а не то, что повысит твой грейд Лучший способ вырасти — это персональный план развития от Senior-инженера из БигТеха. Вот как все работает: 1⃣ Мок-интервью: за час 1-на-1 ментор проведет реальный собес на тот грейд, который ты хочешь 2⃣ Честный фидбек: созвонимся и расскажем твои точки роста, оценим грейд и потенциальный уровень зарплаты 3⃣Персональный план развития: не просто «учите алгосы», а роадмап с конкретными темами, который приведет тебя к желаемому грейду или офферу 📈 Да, и все это за 900 рублей. Почему так дешево? Мы хотим, чтобы у каждого была возможность проверить в деле наш сервис, а потом уже доверить нам свое развитие. Мы в ШОРТКАТе провели уже почти 1000 таких мок-интервью и получили оценку 4.9 из 5, поэтому знаем о чем говорим. Переходи в нашего бота и забирай свой мок за 900 рублей → @shortcut_sh_bot Реклама. О рекламодателе.

У тебя несколько потоков-продюсеров, которые кладут элементы в очередь, и несколько потоков-консьюмеров, которые их оттуда за
У тебя несколько потоков-продюсеров, которые кладут элементы в очередь, и несколько потоков-консьюмеров, которые их оттуда забирают. Если очередь полная, продюсеры ждут. Если очередь пустая, консьюмеры ждут. Как реализовать такую потокобезопасную ограниченную очередь? На первый взгляд задача простая, но на деле она проверяет, насколько хорошо ты понимаешь синхронизацию и координацию потоков. Ответ Мы держим фиксированного размера буфер (Deque). Продюсеры при вызове put ждут, если буфер заполнен. Консьюмеры при вызове take ждут, если буфер пуст. Когда продюсер кладёт элемент, он сигналит ожидающему консьюмеру. Когда консьюмер забирает элемент, он сигналит ожидающему продюсеру. Ожидание всегда делается внутри while, чтобы поток после пробуждения перепроверил условие. Флаг close запрещает новые вставки и будит всех, чтобы они завершились корректно. Предпочтительный способ это использовать ReentrantLock. Это как synchronized, только с большим контролем. Один и тот же поток может захватить его несколько раз без дедлока. Он позволяет создавать Condition-объекты — это очереди ожидания, привязанные к замку. Здесь удобно завести две: notFull и notEmpty, чтобы продюсеры и консьюмеры ждали и сигналили точно по ситуации. 👉 Java Portal

Что такое Domain-Driven Design Domain-Driven Design, или DDD, это подход к разработке ПО, который помогает переводить сложные
Что такое Domain-Driven Design Domain-Driven Design, или DDD, это подход к разработке ПО, который помогает переводить сложные предметные области в выразительное, живое и эволюционирующее программное обеспечение. Он нужен, когда требования пользователей сложные. Подход сформулировал Эрик Эванс, автор «Синей книги». Техническая ценность DDD в том, что он помогает писать выразительный, насыщенный и инкапсулированный код, который легко тестировать, масштабировать и сопровождать. Единый язык это словарь домена, который команда вырабатывает вместе с экспертами. Когда язык согласован, разработчики могут напрямую связывать реализацию с реальными событиями и понятиями бизнеса. Сущности это доменные объекты, для которых важна идентичность. Примеры: User, Job, Vinyl, Post, Comment. Сравнение сущностей идет по уникальному идентификатору, обычно это UUID или первичный ключ. Объекты-значения не имеют идентичности. Это атрибуты сущностей. Например, Name как объект-значение у User. Агрегат это набор сущностей, объединенный корнем агрегата. Корень агрегата это то, к чему обращаются при поиске и через что проходят все операции. Внешний код не должен ссылаться на объекты внутри границ агрегата. Так сохраняется согласованность. Модель предметной области в DDD опирается на смыслы терминов domain и model. Домен это детали задачи, которую вы решаете. Это знание о бизнесе, операциях, терминологии, правилах, целях и ограничениях. Понимание этого определяет саму проблему и рамки решения. Доменные сервисы это место для доменной логики, которая не принадлежит ни одному конкретному объекту. Ограниченный контекст это ключевой паттерн DDD, который помогает держать сложность под контролем. Он масштабирует большие модели и команды. Код реализуется внутри конкретного контекста после того, как определены домен и поддомены. Ограниченные контексты задают границы, внутри которых определен и применим конкретный поддомен. Репозиторий используется для получения доменных объектов из слоя хранения. С опорой на принцип подстановки Лисков и многослойную архитектуру можно спроектировать доступ так, чтобы, например, переключаться на in-memory репозиторий для тестов. Фабрика нужна, потому что доменные объекты создаются разными способами. Объекты домена можно собирать фабрикой из сырых строк SQL, сырого JSON или из Active Record, который вернул ваш ORM инструмент вроде Sequelize или TypeORM. 👉 Java Portal

👩‍💻 Ищем Java разработчиков. Релокейт, удалёнка, платим много! Специально для Вас, собираем лучшие вакансии, только с прямыми контактами в Telegram! 👩‍💻 Java 👣 Go 👩‍💻 C# 👩‍💻 Python 🖼️ PHP 👩‍💻 Node.js 👩‍💻 DevOps 🤖 ML & DS 🔎 QA 🖥 SQL 👩‍💻 UX/UI 👩‍💻 Frontend 👩‍💻 Mobile 👩‍💻 Analyst 💼 1C Подпишись чтобы не упустить свой шанс получить лучший оффер!

Задумывались, почему оператор == в Java работает для одних значений Integer, а для других — нет? Дело в механизме, который на
Задумывались, почему оператор == в Java работает для одних значений Integer, а для других — нет? Дело в механизме, который называется Integer Caching. JVM кэширует объекты Integer в диапазоне от -128 до 127. Когда вы присваиваете значение в этом диапазоне, Java переиспользует один и тот же объект из кэша. Поэтому две переменные с одинаковым числом в этом диапазоне указывают на одну и ту же ссылку, и == возвращает true Но за пределами диапазона, например для 128 или 1000, каждый раз создается новый объект. Ссылки разные, поэтому == вернет false, даже если значения совпадают. Главное, что стоит запомнить: == сравнивает ссылки на объекты, а не сами значения. Чтобы сравнить числа, всегда используйте .equals() Этот трюк с кэшированием также работает для Byte, Short, Character (до 127) и Long (от -128 до 127) 👉 Java Portal

В этой статье рассказывается, как внутри работает новый профайлер по CPU-времени в Java, включая обработку сигналов, устройст
В этой статье рассказывается, как внутри работает новый профайлер по CPU-времени в Java, включая обработку сигналов, устройство очередей и асинхронное сэмплирование. Подробный разбор основных компонентов, скрытых за кулисами. Подробнее читайте здесь После узнайте о том, как в новом CPU-тайм профайлере Java 25 устроена очередь для запросов на сэмплинг: зачем она нужна, почему её размер критичен для баланса между потерей сэмплов и расходом памяти, и по каким правилам JVM выбирает этот размер в зависимости от интервала сэмплинга. Подробнее: читать 👉 Java Portal

Вот задача для собеседования по Java У вас есть два потока. Поток 1 печатает нечётные числа. Поток 2 печатает чётные числа. К
Вот задача для собеседования по Java У вас есть два потока. Поток 1 печатает нечётные числа. Поток 2 печатает чётные числа. Как их синхронизировать так, чтобы вывод всегда шёл по порядку: 1 2 3 4 5… Звучит просто, но заставляет внимательно подумать о координации потоков. Ответ Самый аккуратный способ это использовать семафоры. Семафор управляет набором разрешений (токенов). Поток, вызывающий acquire, забирает разрешение, и если его нет — ждёт. Поток, вызывающий release, возвращает разрешение, чем будит ожидающий поток. Мы создаём два семафора: один для нечётных, другой для чётных. Семафор для нечётных изначально имеет 1 разрешение, чтобы первый поток мог стартовать, а для чётных — 0, чтобы он ждал. После того как нечётный поток печатает число, он делает release для чётного. Чётный поток делает acquire, печатает, и отдаёт разрешение обратно нечётному. Такое чередование гарантирует точную последовательность 1 2 3 4 … без активного ожидания, без sleep и без гонок. 👉 Java Portal

Вышла неплохая статья про Big O Big O помогает разобраться, как ведут себя алгоритмы, и показывает, где можно выжать кратный прирост производительности даже с мелкими правками в коде. В статье есть наглядные визуализации, интерактив и простые объяснения. 👉 Java Portal

Большинство Java-разработчиков форматируют числа вручную. Но в Java есть форматтеры с поддержкой локали, которые подстраивают
Большинство Java-разработчиков форматируют числа вручную. Но в Java есть форматтеры с поддержкой локали, которые подстраиваются автоматически. Одно и то же значение будет выглядеть по-разному в зависимости от региона. В США это будет 12,000.75. Во Франции — 12 000,75. В Индии используется группировка по лакхам и крор. В России — 12 000,75. А в компактном формате то же самое число станет 12K на английском или 12 हज़ार на хинди. И всё это доступно из коробки. Вместо того чтобы изобретать велосипед, можно просто использовать стандартные API Java. 👉 Java Portal

Как вам эта джавовская мудрость: - Используй enum, а не строковые константы - - компилятор сам поймает ошибки. - Не создавай потоки вручную - - используй executors. - Всегда закрывай JDBC-ресурсы - - иначе база останется без коннекшенов. - Не глотай checked-исключения - - хотя бы логируй их. - Не игнорируй InterruptedException - - это ломает координацию потоков. - Не используй SimpleDateFormat в многопоточном коде - - он не потокобезопасен. - Кэшируй prepared statements - - парсить SQL каждый раз слишком дорого. - Дженерики защищают тебя на этапе компиляции - - не убивай их, приводя к Object 👉 Java Portal

Как Java передаёт объекты по сети или сохраняет их для последующего использования? Для этого есть сериализация. Она преобразу
Как Java передаёт объекты по сети или сохраняет их для последующего использования? Для этого есть сериализация. Она преобразует объект в набор байтов, чтобы его можно было передать или сохранить. Обратная операция — десериализация, которая восстанавливает объект из этих байтов. Каждый класс, поддерживающий Serializable, имеет serialVersionUID. Это идентификатор версии. При десериализации Java проверяет, совпадает ли UID в данных с тем, что в классе. Если совпадает — объект принимается. Если нет — выбрасывается InvalidClassException. Что будет, если класс изменился после того, как некоторые объекты уже были сериализованы? - Добавлено поле → старые объекты работают, новое поле получает значение по умолчанию (0, null, false). - Удалено поле → старые данные для него игнорируются. - Изменён тип поля → ломается. - Изменён UID → ломается. Если UID не определить явно, JVM сгенерирует его автоматически на основе деталей класса (поля, методы, модификаторы). Даже небольшое изменение, например переименование поля, изменит UID и сделает старые данные несовместимыми. Рекомендую всегда задавать serialVersionUID вручную. Это даёт контроль над совместимостью и избавляет от неожиданных ошибок. 👉 Java Portal

Какие языки программирования самые «зелёные»? Обычно при выборе языка мы смотрим на синтаксис, производительность или простот
Какие языки программирования самые «зелёные»? Обычно при выборе языка мы смотрим на синтаксис, производительность или простоту обучения. Но несколько лет назад группа португальских исследователей изучила энергопотребление 27 популярных языков программирования, измеряя время выполнения, энергозатраты и пиковое использование памяти. Результаты показали компромиссы: быстрый код не всегда самый энергоэффективный, а работа с памятью сильно влияет на энергопотребление. Эти выводы могут помочь инженерам при выборе языка, когда важна энергоэффективность. Выводы исследования: Cи оказался самым энергоэффективным языком. Python и Perl — наименее экологичные языки программирования. Источник: читать 👉 Java Portal

Наткнулся на такой пост от сеньора, про предварительные условия для System Design:
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.
👉 Java Portal

Второй пост в блоге показывает, как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать лу
Второй пост в блоге показывает, как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать лучше с помощью Embabel. Сегодня в фокусе: Pydantic AI — читать 👉 Java Portal

Boolean-функции в Java Stream API При работе со 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
👉 Java Portal

JavaCV Это Java-обёртка к OpenCV, FFmpeg и другим нативным библиотекам через JavaCPP Presets. Позволяет делать компьютерное з
JavaCV Это Java-обёртка к OpenCV, FFmpeg и другим нативным библиотекам через JavaCPP Presets. Позволяет делать компьютерное зрение и обработку видео и аудио на JVM. Умеет делать захват с камеры и из файлов, декодирование и кодирование, обработка изображений, интеграция с библиотеками вроде OpenCV, FFmpeg, Tesseract, librealsense и др. Работает на Windows, macOS, Linux и Android. Пакет есть в Maven Central. Готовые бинари подтянутся автоматически. Примеры кода есть в репозитории с демо Домашняя страница проекта с деталями про JavaCPP и пресеты 👉 Java Portal

ИТ-специалисты Петербурга, общий сбор 6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеро
ИТ-специалисты Петербурга, общий сбор  6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов. Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.  В первый день: — Разберетесь в архитектуре систем, надежности и работе с данными.  — Узнаете, как технологии помогают решать задачи клиентов и бизнеса. — Поймете, как идеи становятся инструментами и продуктами. Во второй день:  — Услышите про актуальные подходы к обеспечению информационной безопасности в разработке. — Узнаете про backend-принципы, которые помогают работать эффективнее. — Увидите, как работают LLM и куда все это движется. Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге. Успейте зарегистрироваться до 5 сентября