Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
IntelliJ IDEA EAP обеспечивает навигацию по журналам именно в том месте, где было зарегистрировано сообщение!
https://blog.jetbrains.com/idea/2024/02/intellij-idea-2024-1-eap-6/
👉 @BookJava
Хотите понять, как решаются одни и те же задачи с помощью кода на разных языках? Записывайтесь на бесплатный мини-курс по основам Java-разработки. На нём вы не только изучите основы и инструменты Java, но и сравните возможности Java и Python, разберёте, чем полезен каждый язык. Опыт и знания в IT не нужны для участия.
Подробнее: 👉 https://epic.st/LVs5Ep
— Формат мини-курса отлично подойдёт для обучения из любой точки мира. Смотрите видео в удобное время, а после выполняйте практические задания. В конце вас ждёт прямой эфир с экспертом, где он поделится профессиональными секретами, разберёт работы участников и ответит на вопросы.
Что будем делать на мини-курсе:
🔹 Обсудим, почему Java — один из самых востребованных языков
🔹 Познакомимся с кодом Java и рассмотрим ключевые элементы приложений на этом языке
🔹 Определим навыки для трудоустройства
🔹 Сравним Java и Python
🔹 Сделаем 3 Java-приложения по инструкции
Успейте записаться бесплатно!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Привет! Это Podlodka Crew, мы организовываем IT-конференции онлайн по разным технологиям.
Уже 11 марта у нас стартует новый сезон по Java с актуальной темой «Интеграции между сервисами».
С интеграциями мы сталкиваемся каждый день и вынуждены разбираться, какие выбирать и как их правильно реализовать.
В этом сезоне обсудим best practices, научимся их применять в реальной жизни, развенчаем популярные мифы:
🌟Звёздная рулетка кейсов с Филлипом Дельгядо, Гришей Кошелевым, Владимиром Картяевым и Кириллом Ветчинкиным. Выясним, когда использовать синхронное, а когда асинхронное взаимодействие. Всё это — на примере задач из опыта спикеров.
🌟 Рассмотрим современный клиент NoSQL баз данных вместе с Артёмом Дубининым из VK и Tarantool. Подружим Java с NoSQL базами данных, поймём, какой API использовать, подберём интерфейсы к серверу и кластеру. Изучим опыт внедрения Spring Data API.
🌟Обсудим легенды и мифы REST API: существует ли он и как его разрабатывать. А ещё окунёмся в best-practices разработки JSON HTTP API и затронем вопросы синергии REST с современными микросервисными архитектурами.
Это не все доклады нового сезона! Приходи на сайт смотреть подробное расписание и забирай свой билет: https://podlodka.io/javacrew
Реклама. ИП Толстая Елена Петровна ИНН:507503278104, erid:2SDnjbwP94c
👁🗨 Как делать профилирование с помощью VisualVM в Java?
Расскажет Александр Царев — Tech Lead в Сбере и кандидат технических наук.
Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом:
- вспомните, что такое дамп потоков и как его получить;
- узнаете разницу между профилированием и семплированием и как их проводить с помощью инструмента VisualVM;
- разберете результаты семплирования, чтобы понять, как по ним находить узкие места в производительности.
📢📢 Занятие пройдёт 6 марта в 20:00 мск и будет приурочено к старту курса «Java Developer. Advanced».
Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cv2RGKРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Пишем минимальный ActivityPub-сервер с нуля
Mastodon — это децентрализованная социальная сеть, работающая по модели федерации, как email. Протокол федерации называется ActivityPub и является стандартом W3C, а Mastodon — далеко не единственная его реализация, но самая популярная. Различные реализации протокола, как правило, совместимы друг с другом, настолько, насколько им позволяют их совпадения в функциональности. У меня есть и мой собственный проект ActivityPub-сервера — Smithereen, такой зелёный децентрализованный ВК, где я когда-нибудь таки верну стену.
В этой статье мы рассмотрим основы протокола ActivityPub и напишем минимально возможную реализацию сервера, позволяющую отправлять посты в сеть («fediverse»), подписываться на других пользователей и получать от них обновления.
https://habr.com/ru/articles/702724/
👉@BookJava
Совет по Spring Boot 💡
Вы думаете о замене 🍃`RestTemplate
` на новый Spring `RestClient
`? Конфигурация SSL очень проста благодаря поддержке 🔐`SslBundles
` через интерфейс `RestClientSsl
` 👆
👉@BookJava
Совет по Spring Boot💡
Ошибка конфигурации сервера Spring Boot ⬇
https://gist.github.com/aoudiamoncef/bba3f7c79f1056a22a3a82b3a171b5b3
👉@BookJava
👩💻 Java Developer. Professional — новая расширенная программа для нереального повышения квалификации
Освойте самые востребованные практики под руководством топовых экспертов из ведущих компаний на онлайн-курсе от OTUS.
Обновленная программа идеально подойдет для опытных разработчиков на Java и других языках ООП, которые уперлись в карьерный и финансовый потолок.
На курсе вас ждут:
- живые вебинары с разбором самых важных тем;
- еще больше практики и сильные проекты для портфолио;
- поддержка профессионального комьюнити;
- рассрочка на выгодных условиях.
Набор всего 2 раза в год, не упустите свой шанс!
➡️ Пройдите бесплатный тест прямо сейчас и узнайте, готовы ли вы стать более востребованным специалистом: https://vk.cc/cuYCXHРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
💪 Как Java-разработчику повысить квалификацию и увеличить доход в 2024?
Освоить JVM с профилированием и оптимизацией приложений в облаках на онлайн-курсе «Java Developer. Advanced» от OTUS.
Программа идеально подойдет для Java-разработчиков с опытом от 2-х лет, желающих углубить знания в устройстве JVM, принципах профилирования и оптимизации приложений в облачной инфраструктуре.
На курсе вас ждут:
▫️ живые вебинары с возможностью задать вопросы экспертам;
▫️много практики и сильные проекты для портфолио;
▫️поддержка профессионального комьюнити;
▫️ рассрочка на комфортных условиях.
🤝 Проверьте свои навыки пройдя тест и получите специальную цену: https://vk.cc/cuSK78Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Чем отличается CountDownLatch от CyclicBarrier?
CountDownLatch, дословно «Запор с обратным отсчетом», – примитив синхронизации из стандартной библиотеки Java. Он останавливает пришедшие потоки, пока внутренний счетчик не достигнет нуля. Чтобы поставить поток на ожидание, нужно вызвать из него метод await()
.
Начальное значение счетчика задается параметром конструктора, затем уменьшается на 1 методом countDown()
. Узнать текущее значение можно с помощью getCount()
. Изменение значения счетчика никак не связано с потоками, его можно вызывать откуда и когда угодно.
CyclicBarrier – барьер для потоков, который ломается при достижении критической массы ожидающих. Это тоже класс из Java Concurrency Framework. Поток также встает на ожидание методом await()
. Ожидающие потоки называются parties, их лимит также устанавливается в конструкторе.
Технически, parties барьера и count латча – одно и то же, await барьера – это await+countDown латча. В барьере тоже доступна информация о текущем состоянии барьера (методы isBroken
, getParties
и getNumberWaiting
).
Помимо этого, CyclicBarrier дает две дополнительных возможности. Во-первых, в конструктор кроме parties можно передать коллбэк с действием, которое выполнится в момент прорыва барьера. Во-вторых, этот примитив переиспользуется: метод reset()
насильно прорывает текущий барьер и устанавливает новый.
Оба этих примитива помогают решить задачу о гарантированных дедлоках. Противоположность латча и барьера – семафор. В нём потоки блокируются при достижении счетчиком нуля.
👉@BookJava
Совет по Spring Boot💡
Spring Boot Custom Bean Validations с Jakarta Constraint Validator, группировка ограничений проверки, последовательность групп и i18n
https://gist.github.com/aoudiamoncef/9eeece142d1ef0faa4d06216a41282a2
👉@BookJava
Как углубить свои знания об архитектуре ПО всего за пару часов?
Прийти на бесплатный практический урок «Тактики работы с обнаруживаемостью в архитектуре программного обеспечения» от OTUS. На вебинаре разберём:
- что такое observability и почему это важно для бизнеса;
- как использовать инструменты мониторинга и алертинга для повышения обнаруживаемости;
- принципы и практические примеры использования USE и RED;
- четыре золотых сигнала, которые помогут оптимизировать работу с обнаруживаемостью.
Встречаемся 6 марта в 20:00 мск в рамках курса «Software Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cuOaDC
Совет💡
Если вам не нравится, что стандартный метод подстроки Java выбрасывает исключение, если строка короче, чем ожидалось, вы можете использовать Apache Commons StringUtils
, который не выбрасывает исключение в этом случае и с радостью возвращает все, что может.
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
👉@BookJava
Бесплатный вебинар «Продвинутые аспекты Java collections framework» ☄️
05 марта в 18:00 проведем Бесплатный вебинар «Продвинутые аспекты Java collections framework».
В прямом эфире:
• Разберем тонкости при работе с массивами, списками и мапами
• Расскажем про разницу в производительности основных коллекций, use cases
• Ответим на популярные вопросы с собеседований на позицию Java Middle Developer
Ведущий: Роман Оборин
Опыт программирования на Java — 6 лет
Коммерческий опыт - 10 лет
Вебинар будет полезен Java разработчикам, которые заинтересованы перейти на позицию Middle, повысить уровень знаний Java collections, понять требования к разработчикам, подготовиться к техническому собеседованию.
Регистрация по ссылке:
https://clck.ru/399Qa3
💖 Эфир приурочен к старту курса Java Middle Developer. Для забронировавших место на курсе до 19 марта предлагаем скидку 35%, стоимость обучения составит 85 000 руб.
Обсудить индивидуальную программу обучения, записаться на интервью и задать вопрос можно в нашем telegram-боте
Реклама. ООО "Платформа непрерывного обучения" ИНН 7839405924
erid: 2Vtzqv6yX6S
Что если бы Java-разработчики могли создавать веб-приложения, не прибегая к помощи JavaScript? 🤔
👉 @BookJava
Глубокое погружение в Java Memory Model
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.
👉 @BookJava
Test Driven Development (TDD) in Java
Creating a Queue Abstract Data Type class
Introduction to Test Doubles Dummies and Stubs
Introduction to Test Doubles Spies
Introduction to Test Doubles Mocks
Introduction to Test Doubles - Fakes
источник
👉@BookJava
Все, что вам нужно знать о Java21
Как опытные Java-разработчики, так и новички найдут этот пост информативным и познавательным.
Выпуск Java 21 обусловлен двойной задачей: не только обеспечить множество улучшений производительности, безопасности и стабильности, но и привести язык в соответствие с меняющимися требованиями современных приложений. Java адаптируется к меняющемуся ландшафту и ожиданиям, связанным с ним, чтобы сохранить свою гибкость и актуальность.
https://www.unlogged.io/post/all-you-need-to-know-about-java21
👉@BookJava
🤝 Нам кажется, что вы не готовы к нашему курсу Разработчик на Spring Framework
На курсе все максимально строго:
- Курс рассчитан на профессионалов с практическим опытом работы на Java.
- Мы будем 5 месяцев погружать вас в теорию и практику Spring Framework.
- Дадим 18 практических работ. ❗️Процесс review сдаваемой работы максимально приближен к тому, каким он мог быть на реальном проекте.
- Помимо этого, мы попросим вас сдать дипломную работу. Хотите узнать какие требования к ней (p.s. и чем она будет вам полезна)?
🤝 Готовы рассказать на бесплатном демо-уроке "Как будем выбирать проект?"
➡️ Чтобы записаться на демо-урок вам нужно еще и тест пройти.
Кстати, это отличный шанс проверить свои знания!
Пройти тестРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Бесплатный практический вебинар — Java: с чего начать карьеру в программировании?
⏰ Когда: 29 февраля в 19:00 по мск.
Расскажем за 2 часа, как освоить базовые навыки программирования на Java, найти удаленную работу и расти в профессии.
На практике познакомимся с синтаксисом языка и напишем программу, которую часто дают новичкам на техническом интервью.
🎁 Всем, кто зарегистрировался — Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику — Карта компетенций Java-разработчика.
Погрузитесь в основы Java и задайте вопросы опытному разработчику!
Slim Docker Images для Java
Из этой статьи вы узнаете, как создавать слим Docker-образы для ваших Java-приложений с помощью Alpine Linux и Jlink.
https://piotrminkowski.com/2023/11/07/slim-docker-images-for-java/
👉@BookJava
Совет по SpringFramework 💡
При использовании @SpringSecurity
вы можете получить доступ к текущим данным аутентификации, добавив объект Authentication в качестве параметра метода в вашем @RestController
class.
👉@BookJava
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
Разница между Component, Service, Controller и Repository в Spring Framework
Сегодня я расскажу об одном из самых популярных и фундаментальных - разнице между аннотациями @Component
, @Service
, @Controller
и @Repository
.
https://levelup.gitconnected.com/difference-between-component-service-controller-and-repository-in-spring-framework-b2ce8e5128ca
👉@BookJava
⁉️ Как стать разработчиком на Spring в 2024?
Узнайте на бесплатном практическом уроке от OTUS, где опытный эксперт приоткроет закулисье нашего курса и расскажет:
✔️ как грамотно выбрать итоговый проект, чтобы использовать его для портфолио и получить максимум практических навыков;
✔️ какие требования мы предъявляем к проектам студентов;
✔️ как проходит реализация проектов.
📢📢 Занятие пройдёт 28 февраля в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework».
Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cuQHmWРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Микросервисы на Java, Spring Boot и Cloud
В этом руководстве показано, как построить архитектуру микросервисов с помощью Spring Boot и Spring Cloud.
Внедрение архитектуры микросервисов предоставляет уникальные возможности для обеспечения отказоустойчивости и отказоустойчивости систем, чтобы ваши компоненты могли мягко справляться со скачками нагрузки и ошибками. Кроме того, микросервисы делают изменения менее затратными. Они также могут быть хорошей идеей, когда над одним продуктом работает большая команда. Вы можете разбить свой проект на компоненты, которые могут функционировать независимо друг от друга. Если компоненты могут функционировать независимо друг от друга, их можно отдельно строить, тестировать и развертывать. Это дает организации и ее командам возможность быстро разрабатывать и внедрять продукты.
https://auth0.com/blog/java-spring-boot-microservices/
👉@BookJava
Какая разница между @ElementCollection, @OneToMany и @ManyToMany?
Все эти аннотации – часть Java Persistence API. С их использованием мы регулярно сталкиваемся в реализациях JPA, таких как Hibernate.
Когда в базу данных сохраняется сущность, в которой есть поле-коллекция, это поле обязано быть помеченным одной из аннотаций.@OneToMany
и @ManyToMany
хранят вложенные объекты как отдельные полноценные сущности – для них действуют всё те же требования, которые JPA выдвигает для всех @Entity
классов. Каждая из аннотаций отвечает за свое отношение.@ElementCollection
создает коллекцию встраиваемых классов. Применять её можно только на коллекции, тип элементов которых помечен @Embeddable
, или входит в список стандартных встраиваемых классов (обертки примитивов, строки, даты, и т.д.).
На уровне хранения в реляционной базе, для @ElementCollection
будет также создана отдельная таблица. Технически она будет находиться в отношении one-to-many.
Но из Java кода коллекция будет выглядеть встроенной: её элементом не нужно иметь собственные id, ими нельзя манипулировать отдельно от основной сущности. Единственное, чем такая коллекция отличается от встроенного поля-примитива – её можно загружать лениво (включено по умолчанию).
👉@BookJava
👩💻 Пройди тест по Java и проверь свои знания.
Ответишь — пройдешь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса
🔝 Обновленная, расширенная программа
Группа стартует 29 февраля - успей присоединится на выгодных условиях.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cuMEoAРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576