👋 Канал OTUS в Telegram!
Посты от приглашенных гостей из IT-тусовки, полезные статьи, подборки вакансий от партнеров ➞
Подробнее

Курсы

Программирование
Архитектор программного обеспечения
-40%
Архитектура и шаблоны проектирования
-40%
Fullstack разработчик JavaScript
-40%
MS SQL Server разработчик
-40%
Android-разработчик. Продвинутый курс
-40%
Android-разработчик. Базовый курс
-40%
Backend-разработка на Kotlin
-30%
Программист 1С
-30%
Symfony Framework
-30%
Разработчик на Spring Framework
-20%
Разработчик Golang
-25%
C# ASP.NET Core разработчик
-25%
iOS-разработчик. Базовый курс
-25%
VOIP инженер Базы данных Web-разработчик на Python Разработчик программных роботов (RPA) на базе UiPath и PIX Разработчик игр на Unity Vue.js разработчик Agile Project Manager в IT Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02
Проходил 20 июня 2019 года в 20:00

День открытых дверей
Всё о курсе «Разработчик Java»

День открытых дверей онлайн

День Открытых Дверей — отличная возможность узнать подробнее о программе курса, особенностях онлайн-формата, навыках, компетенциях и перспективах, которые ждут выпускников после обучения. Также преподаватель расскажет о своём профессиональном опыте и ответит на вопросы участников. Поэтому если есть вопрос, запишитесь на онлайн-трансляцию и задайте его в прямом эфире!
Преподаватель
Вадим Тисов

Запись

О курсе

Разработчик Java
100 000 ₽ 60 000 ₽
6 месяцев
Начало 30 июня
Вы получите практику решения сложных задач с подробным код ревью от экспертных Java-разработчиков. Часто в работе junior или middle специалист ограничен однотипными заданиями своего уровня — наша программа решает эту проблему профессионального роста. Вы освоите широкий спектр навыков: алгоритмы и сборщики мусора, байт-код и classloader, паттерны и тестирование, работу с окружением — логирование, jdbc и Hibernate, библиотеки и фреймворки, многопоточность …
Программа курса
Модуль 1
Язык и платформа Java
Модуль 2
Проектирование
Модуль 3
Работа с окружением
Модуль 4
Многопоточность
Модуль 5
Проектная работа
Язык и платформа Java
В этом модуле изучаются фундаментальные основы работы Java Virtual Machine (JVM) и "тонкие" аспекты языка Java. В результате обучения студент сможет достаточно подробно рассказать как выполняется Java программа и что проиходит "под капотом".
Подготовка к курсу. ДЗ
познакомиться с программой курса;
изучить основные инструменты.
Домашние задания: 1
ДЗ
Проект gradle с модульной структурой. 1) Создайте аккаунт на github.com (если еще нет)
2) Создайте репозиторий для домашних работ
3) Сделайте checkout репозитория на свой компьютер
4) Создайте локальный бранч hw01-gradle
5) Создать проект gradle
6) В проект добавьте последнюю версию зависимости
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
7) Создайте модуль hw01-gradle
8) В модуле сделайте класс HelloOtus
9) В этом классе сделайте вызов какого-нибудь метода из guava
10) Создайте "толстый-jar"
11) Убедитесь, что "толстый-jar" запускается.
12) Сделайте pull-request в gitHub
13) Ссылку на PR отправьте на проверку (личный кабинет, чат с преподавателем).

При желании, можно сделать maven-проект и далее на курсе работать с maven-ом.
Для Maven инструкция аналогичная (просто в тексте замените Gradle на Maven).
Дополнение к gradle, история изменения языка
углубить знания о gradle;
познакомиться с текущей ситуацией в мире java.
Контейнеры и алгоритмы. ДЗ
познакомиться с Generic-ами в Java и со стандартными коллекциями.
Домашние задания: 1
ДЗ
DIY ArrayList. Написать свою реализацию ArrayList на основе массива.
class DIYarrayList<T> implements List<T>{...}

Проверить, что на ней работают методы из java.util.Collections:
Collections.addAll(Collection<? super T> c, T... elements)
Collections.static <T> void copy(List<? super T> dest, List<? extends T> src)
Collections.static <T> void sort(List<T> list, Comparator<? super T> c)

1) Проверяйте на коллекциях с 20 и больше элементами.
2) DIYarrayList должен имплементировать ТОЛЬКО ОДИН интерфейс - List.
3) Если метод не имплементирован, то он должен выбрасывать исключение UnsupportedOperationException.
QA и тестирование
познакомиться с junit и mockito;
объяснить на примере, что такое "тестируемое приложение"
14 июля, 20:00 — 21:30
Лектор: Александр Оруджев
Инструменты для преобразования контейнеров, unsafe, jmh
объяснить на примере принципы создания коллекций;
познакомиться с пакетом unsafe, утилитой JMH и
популярными библиотеками коллекций.
17 июля, 20:00 — 21:30
Лектор: Сергей Петрелевич
Аннотации. ДЗ
познакомиться с механизмом Reflection;
объяснить, что такое Аннотации и как их можно сделать.
21 июля, 20:00 — 21:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Свой тестовый фреймворк. Написать свой тестовый фреймворк.

Поддержать свои аннотации @Test, @Before, @After.

Запускать вызовом статического метода с именем класса с тестами.

Т.е. надо сделать:
1) создать три аннотации - @Test, @Before, @After.
2) Создать класс-тест, в котором будут методы, отмеченные аннотациями.
3) Создать "запускалку теста". На вход она должна получать имя класса с тестами, в котором следует найти и запустить методы отмеченные аннотациями и пункта 1.
4) Алгоритм запуска должен быть следующий::
метод(ы) Before
текущий метод Test
метод(ы) After
для каждой такой "тройки" надо создать СВОЙ объект класса-теста.
5) Исключение в одном тесте не должно прерывать весь процесс тестирования.
6) На основании возникших во время тестирования исключений вывести статистику выполнения тестов (сколько прошло успешно, сколько упало, сколько было всего)
Lombok
познакомиться с технологиями annotation Processor и возможностями Lombok.
24 июля, 20:00 — 21:30
Лектор: Вячеслав Лапин
Сборщик мусора. ДЗ
познакомиться со сборщиком мусора в Java.
28 июля, 20:00 — 21:30
Лектор: Виталий Куценко
Домашние задания: 1
ДЗ
Сравнение разных сборщиков мусора. Написать приложение, которое следит за сборками мусора и пишет в лог количество сборок каждого типа
(young, old) и время которое ушло на сборки в минуту.

Добиться OutOfMemory в этом приложении через медленное подтекание по памяти
(например добавлять элементы в List и удалять только половину).


Настроить приложение (можно добавлять Thread.sleep(...)) так чтобы оно падало
с OOM примерно через 5 минут после начала работы.

Собрать статистику (количество сборок, время на сборки) по разным GC.

!!! Сделать выводы !!!
ЭТО САМАЯ ВАЖНАЯ ЧАСТЬ РАБОТЫ:
Какой gc лучше и почему?

Выводы оформить в файле Сonclusions.md в корне папки проекта.
Результаты измерений сведите в таблицу.

Попробуйте провести этот эксперимент на небольшом хипе порядка 256Мб, и на максимально возможном, который у вас может быть.
Углубленные основы (примитивные типы, Remote debug, Hot swap)
объяснить детали устройства типов данных в Java;
познакомиться с механизмами Remote Debug и Hot swap;
познакомиться с утилитой Jol.
31 июля, 20:00 — 21:30
Лектор: Сергей Петрелевич
Байт код, class-loader, инструментация, asm. ДЗ
познакомиться с принципами работы виртуальной машины Java, ClassLoader-ами и байт-кодом.
4 августа, 20:00 — 21:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Автоматическое логирование.. Разработайте такой функционал:
метод класса можно пометить самодельной аннотацией @Log, например, так:

class TestLogging {
@Log
public void calculation(int param) {};
}

При вызове этого метода "автомагически" в консоль должны логироваться значения параметров.
Например так.

class Demo {
public void action() {
new TestLogging().calculation(6);
}
}

В консоле дожно быть:
executed method: calculation, param: 6

Обратите внимание: явного вызова логирования быть не должно.

Учтите, что аннотацию можно поставить, например, на такие методы:
public void calculation(int param1)
public void calculation(int param1, int param2)
public void calculation(int param1, int param2, String param3)

P.S.
Выбирайте реализацию с ASM, если действительно этого хотите и уверены в своих силах.
Java 8
изучить введение в функциональное программирование (ФП);
познакомиться с возможностями ФП, которые появились в Java 8.
7 августа, 20:00 — 21:30
Лектор: Виталий Куценко
Проектирование
В этом модуле рассматриваются принципы проектирования SOLID и паттерны проектирования GOF.
В ходе выполнения Домашних Работ студент сможет на практике научиться применять паттерны проектирования и их комбинации.
Концепты проектирования ООП. ДЗ
объяснить принципы SOLID и общие критерии идеальной архитектуры.
18 августа, 20:00 — 21:30
Лектор: Виталий Куценко
Домашние задания: 1
ДЗ
Эмулятор банкомата. Написать эмулятор АТМ (банкомата).

Объект класса АТМ должен уметь:
- принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
- выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
Это задание не на алгоритмы, а на проектирование.
Поэтому оптимизировать выдачу не надо.
- выдавать сумму остатка денежных средств

В этом задании больше думайте об архитектуре приложения.
Не отвлекайтесь на создание таких объектов как: пользователь, авторизация, клавиатура, дисплей, UI (консольный, Web, Swing), валюта, счет, карта, т.д.
Все это не только не нужно, но и вредно!
Behavioral patterns
объяснить поведенческие паттерны проектирования
21 августа, 20:00 — 21:30
Лектор: Виталий Куценко
Structural patterns. ДЗ
изучить структурные паттерны проектирования
25 августа, 20:00 — 21:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Департамент ATM. Написать приложение ATM Департамент:
1) Департамент может содержать несколько ATM (попробуйте цепочку ответственности).
2) Департамент может собирать сумму остатков со всех ATM (попробуйте команду с наблюдателем).
3) Департамент может инициировать событие – восстановить состояние всех
ATM до начального (начальные состояния у разных ATM могут быть
разными). (попробуйте memento).
Это тренировочное задание на применение паттернов.

Не добавляйте департамент в предыдущее задание.
Лучше, в случае необходимости, скопируйте нужные файлы из прошлого задания в это.
Creational patterns
изучить "создающие" паттерны проектирования
28 августа, 20:00 — 21:30
Лектор: Павел Стрекалов
Работа с окружением
Этот блок посвящен вопросам взаимодействия java-приложения с внешним миром.

Рассматриваются операции с файловой системой, механизмы сериализации/десериализации объектов.

Большое внимание уделяется работе с реляционными базами данных. Подробно изучаются jdbc и Hibernate. При этом не забываем про noSQL. В качестве примера работы с noSQL рассматривается реактивное взаимодействие с MongoDb.

Особое внимание уделяется разработке Web-серверов. Изучаем TomCat как пример контейнера war-приложений и Jetty - как встроенный web-сервер, учимся применять технологию web-сокетов.

В качестве примера Dependency Injection изучаем Spring и Spring Boot.
Сериализация. ДЗ
познакомиться с функционалом сериализации объектов.
1 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Cвой json object writer. Напишите свой json object writer (object to JSON string) аналогичный gson на основе javax.json.

Gson это делает так:
Gson gson = new Gson();
AnyObject obj = new AnyObject(22, "test", 10);
String json = gson.toJson(obj);

Сделайте так:
MyGson myGson = new MyGson();
AnyObject obj = new AnyObject(22, "test", 10);
String myJson = myGson.toJson(obj);

Должно получиться:
AnyObject obj2 = gson.fromJson(myJson, AnyObject.class);
System.out.println(obj.equals(obj2));

Поддержите:
- примитивные типы
- массивы примитивных типов
- коллекции (interface Collection)
не забываться, что obj может быть null :)
NIO. Логирование
познакомиться с методами логирования в Java;
познакомиться с NIO.
4 сентября, 20:00 — 21:30
JDBC. ДЗ
познакомиться с транзакцией в реляционной СУБД и jdbc.
8 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Самодельный ORM. Работа должна использовать базу данных H2.

Создайте в базе таблицу User с полями:

• id bigint(20) NOT NULL auto_increment
• name varchar(255)
• age int(3)

Создайте свою аннотацию @Id

Создайте класс User (с полями, которые соответствуют таблице, поле id отметьте аннотацией).

Реализуйте интерфейс JdbcMapper<T>, который умеет работать с классами, в которых есть поле с аннотацией @Id. JdbcMapper<T> должен сохранять объект в базу и читать объект из базы.
Для этого надо реализовать оставшиеся интерфейсы из пакета mapper.
Таким обзазом, получится надстройка над DbExecutor<T>, которая по заданному классу умеет генерировать sql-запросы.
А DbExecutor<T> должен выполнять сгенерированные запросы.

Имя таблицы должно соответствовать имени класса, а поля класса - это колонки в таблице.

Проверьте его работу на классе User.

Создайте еще одну таблицу Account:
• no bigint(20) NOT NULL auto_increment
• type varchar(255)
• rest number

Создайте для этой таблицы класс Account и проверьте работу JdbcMapper на этом классе.
Общие вопросы работы с СУБД, myBatis
рассмотреть CAP-теорему;
рассмотреть методы организации блокировок;
познакомиться с MyBatis.
11 сентября, 20:00 — 21:30
Лектор: Павел Стрекалов
Hibernate
познакомиться с Hibernate.
15 сентября, 20:00 — 21:30
Лектор: Александр Оруджев
JPQL. ДЗ
познакомиться с Connection Pool;
проанализировать методы конструирования запросов в Hibernate.
18 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Использование Hibernate. Работа должна использовать базу данных H2.

Возьмите за основу предыдущее ДЗ (Самодельный ORM),
используйте предложенный на вебинаре api (пакет api)
и реализуйте функционал сохранения и чтения объекта User через Hibernate.
(Рефлексия больше не нужна)
Конфигурация Hibernate должна быть вынесена в файл.

Добавьте в User поля:
адрес (OneToOne)
class AddressDataSet {
private String street;
}
и телефон (OneToMany)
class PhoneDataSet {
private String number;
}

Разметьте классы таким образом, чтобы при сохранении/чтении объека User каскадно сохранялись/читались вложенные объекты.

ВАЖНО.
1) Hibernate должен создать только три таблицы: для телефонов, адресов и пользователей.
2) При сохранении нового объекта не должно быть update-ов.
Посмотрите в логи и проверьте, что эти два требования выполняются.
Типы ссылок. Кэширование. ДЗ
объяснить какие в java есть виды ссылок и для чего они нужны;
оценить как устроены кэши;
познакомиться с "промышленным" кэшом Ehcache.
22 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Свой cache engine . Закончите реализацию MyCache из вебинара.
Используйте WeakHashMap для хранения значений.

Добавьте кэширование в DBService из задания про Hibernate ORM или "Самодельный ORM".
Для простоты скопируйте нужные классы в это ДЗ.

Убедитесь, что ваш кэш действительно работает быстрее СУБД и сбрасывается при недостатке памяти.
No SQL
познакомиться с noSQL базами данных;
объяснить отличия SQL от noSQL, когда и что следует использовать;
познакомиться с MongoDB.
25 сентября, 20:00 — 21:30
Лектор: Александр Оруджев
Web сервер. ДЗ
объяснить на примере Jetty принципы работы Web-сервера и servlet API
29 сентября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Веб сервер. Встроить веб-сервер в приложение из ДЗ про Hibernate ORM (или в пример из вебинара встроить ДЗ про Hibernate :)).
Сделать стартовую страницу, на которой админ должен аутентифицироваться.
Сделать админскую страницу для работы с пользователями.
На этой странице должны быть доступны следующие функции:
- создать пользователя
- получить список пользователей
Dependency injection. ДЗ
объяснить фундаментальные основы Inversion of Control (IoC) и Dependency Injection (DI)
2 октября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Домашнее задание (Собственный IoC контейнер). Обязательная часть:

- Скачать заготовку приложения тренажера таблицы умножения из репозитория с примерами
- В классе AppComponentsContainerImpl реализовать обработку, полученной в конструкторе конфигурации, основываясь на разметке аннотациями из пакета appcontainer.
Так же необходимо реализовать методы getAppComponent
- В итоге должно получиться работающее приложение. Менять можно только
класс AppComponentsContainerImpl

Дополнительное задание (можно не делать):
- Разделить AppConfig на несколько классов и распределить по ним создание компонентов. В AppComponentsContainerImpl добавить конструктор, который обрабатывает несколько классов-конфигураций

Дополнительное задание (можно не делать):
- В AppComponentsContainerImpl добавить конструктор, который принимает на вход имя пакета, и обрабатывает все имеющиеся там классы-конфигурации (см. зависимости в pom.xml)
War. Spring MVC. ДЗ
объяснить принципы работы контейнера TomCat;
объяснить, что такое war-файл и как его собрать;
объяснить Spring MVC.
6 октября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Веб-приложение на Spring MVC. - Собрать war для приложения из ДЗ про Web Server
- Создавать основные классы приложения, как Spring beans (Кэш, Dao, DBService)
- Настройку зависимостей выполнить с помощью Java/Annotation based конфигурации
- Для обработки запросов использовать @Controller и/или @RestController
- В качестве движка шаблонов использовать Thymeleaf
- Запустить веб приложение во внешнем веб сервере

Авторизацию и аутентификацию делать не надо.
Asynchronous Web applications
объяснить как можно сделать асинхронный web-сервис на java;
познакомиться со Spring Boot.
9 октября, 20:00 — 21:30
Многопоточность
Этот модуль посвящен многопоточности в разных ее проявлениях.
Начинаем изучение с разбора Java Memory Model, какова цель ее создания, что решается и как это использовать.
Заканчиваем Completable Future.
Начинаем разрабатывать многопоточные приложения и переходим к разработке многопроцессорных приложений - приложения, отдельные части которых работают на разных хостах.

Чтобы понять как объединить такие приложения, изучаем блокирующие и неблокирующие сокеты (NIO).
Thread
познакомиться с основными принципами многопоточности;
объяснить как управлять потоками в Java.
20 октября, 20:00 — 21:30
JMM. ДЗ
познакомиться с основными проблемами многопоточности;
объяснить зачем придумали JMM;
узнать основные положения JMM.
23 октября, 20:00 — 21:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Последовательность чисел. Два потока печатают числа от 1 до 10, потом от 10 до 1.
Надо сделать так, чтобы числа чередовались, т.е. получился такой вывод:
Поток 1:1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 2 3 4....
Поток 2: 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 2 3....
Message System. ДЗ
познакомиться с потокобезопасными контейнерами;
познакомиться с паттерном - "система обмена сообщениями".
27 октября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
MessageSystem. Добавить систему обмена сообщениями в ДЗ про веб сервер с IoC контейнером.
Пересылать сообщения из вебсокета в DBService и обратно.
Executors
познакомиться с пулами потоков в Java.
30 октября, 20:00 — 21:30
Многопроцессные приложения. ДЗ
проанализировать сетевое взаимодействие в java.
объяснить принципы работы "клиент-серверного" приложения в Java
3 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
MessageServer. Cервер из предыдущего ДЗ про MessageSystem разделить на три приложения:
• MessageServer
• Frontend
• DBServer
Запускать Frontend и DBServer из MessageServer.
Сделать MessageServer сокет-сервером, Frontend и DBServer клиентами.
Пересылать сообщения с Frontend на DBService через MessageServer.

Запустить приложение с двумя серверами фронтенд и двумя серверами баз данных на разных портах.
Если у вас запуск веб приложения в контейнере, то MessageServer может копировать root.war в контейнеры при старте
NIO
изучить основы сетевых возможностей NIO.
6 ноября, 20:00 — 21:30
Netty
изучить основные принципы работы Netty.
10 ноября, 20:00 — 21:30
Проектная работа
Заключительный месяц курса посвящен проектной работе. Свой проект - это то, что интересно писать студенту. То, что можно создать на основе знаний, полученных на курсе.
При этом не обязательно закончить его за месяц, однако к защите надо разработать действующий прототип, который пояснит идею проекта.

В процессе написания по проекту можно получить консультации преподавателей.

Для достижения результата работа над проектом организуется в виде недельных итераций.

Проект должен стать примером кода, который можно показывать потенциальным работодателям.

Студет может самостоятельно выбрать технологии из числа изученных на курсе и/или использовать что-то дополнительно.

Примеры тем:
- телеграм-бот
- распределенный кэш
- web сервер (разберите протокол)
- socket сервер на NIO (как netty)
- свой ORM
- кэш для hibernate
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
13 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Проектная работа. Заключительный месяц курса посвящен проектной работе. Свой проект это то, что интересно писать студенту. То, что можно создать на основе знаний, полученных на курсе.
При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

Проект должен стать примером кода, который можно показывать потенциальным работодателям.

Примеры тем проекта:
- web сервер (разберите протокол)
- socket сервер на NIO (как netty)
- свой ORM
- распределенный кэш
- кэш для hibernate
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
17 ноября, 20:00 — 21:30
Защита проектных работ
защитить проект и получить рекомендации экспертов.
20 ноября, 20:00 — 21:30

Преподаватель

Вадим Тисов
Ведущий разработчик в QIWI
Закончил магистратуру МФТИ факультет ФИВТ. Занимается разработкой нового платежного процессинга на основе микросервисной архитектуры на Kotlin, Spring Boot, Spring Cloud, Kubernetes.

Интересы:
разработка распределенных систем, DevOps

Компании:
Сбербанк-Технологии, Альфа-Лаборатория

Сертификаты:
Oracle Certified Professional, Professional Scrum Master level 1
Преподаватель курсов:
Разработчик Java

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.