Java | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
显示更多📈 Telegram 频道 Java | Вопросы собесов 的分析概览
频道 Java | Вопросы собесов (@easy_java_ru) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 11 290 名订阅者,在 技术与应用 类别中位列第 10 935,并在 俄罗斯 地区排名第 56 548 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 11 290 名订阅者。
根据 04 十一月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -44,过去 24 小时变化为 -2,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 9.56%。内容发布后 24 小时内通常能获得 5.73% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 079 次浏览,首日通常累积 647 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 6。
- 主题关注点: 内容集中在 ставь, void, string, строка, static 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
凭借高频更新(最新数据采集于 05 十一月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
11 290
订阅者
-224 小时
-187 天
-4430 天
帖子存档
11 290
📌 Какой существует эффективный способ удостоверится, что все сервлеты доступны только для пользователя с верной сессией ?
💬 Спросят с вероятностью 6%
Для обеспечения доступа к сервлетам только для пользователей с действительной сессией и правильными учетными данными существует несколько подходов. Один из эффективных способов — это использование фильтров (Servlet Filters) для проверки сессии перед обработкой запроса сервлетом.
Использование Servlet Filters для проверки сессии
Позволяют перехватывать запросы к сервлетам и выполнять необходимые проверки или обработки до передачи запроса сервлету. Вы можете создать фильтр для проверки наличия и корректности сессии пользователя.
1️⃣ Создание фильтра:
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.FilterServletRequest;
import javax.servlet.FilterServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*") // Применение фильтра ко всем запросам
public class SessionValidationFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Инициализация фильтра (если необходимо)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession(false); // false означает не создавать новую сессию, если она отсутствует
// Проверка наличия сессии и атрибутов сессии (например, логин пользователя)
if (session == null || session.getAttribute("user") == null) {
// Перенаправление на страницу логина, если сессия недействительна
httpResponse.sendRedirect(httpRequest.getContextPath() + "/login");
} else {
// Продолжение цепочки фильтров и передача запроса сервлету
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
// Очистка ресурсов фильтра (если необходимо)
}
}
2️⃣ Регистрация фильтра в web.xml (если не используете аннотации):
<web-app ...>
<filter>
<filter-name>SessionValidationFilter</filter-name>
<filter-class>com.example.SessionValidationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Использование декларативной безопасности
Позволяет ограничивать доступ к ресурсам на основе ролей пользователей, что тоже может помочь в контроле доступа к сервлетам.
<web-app ...>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.html</form-login-page>
<form-error-page>/login-error.html</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>USER</role-name>
</security-role>
</web-app>
Для обеспечения доступа к сервлетам только для пользователей с действительной сессией наиболее эффективным способом является использование Servlet Filters для проверки сессии. Фильтры позволяют централизованно управлять доступом к ресурсам и обеспечивать безопасность, а также можно использовать декларативную безопасность в web.xml для управления доступом на основе ролей.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых11 290
🧑💻 Если твой английский позволяет ответить только на вопрос "Do you speak English", то с этим нужно что-то делать, будучи программистом.
🫤 Ты в курсе, что ...
- говорят по-английски — 20% из всех людей.
- Большое кол-во IT документации написано на английском.
Хочешь понимать код лучше? Изучи язык, который используется в его основе.
📕 На нашем канале ты постепенно будешь набираться опыта, в этом тебе помогут:
- Тесты для изучения английского: проверьте свои знания на практике.
- Английский через мемы: учите язык весело и с интересом.
- Шпаргалки для повторения: закрепите знания быстро и эффективно.
- Английский сленг программиста: станьте настоящим профи в коммуникации.
🔥 Маленький шаг в изучении иностранного откроет перед тобой большие возможности будущего специалиста и значительно повысит твое зп.
🌸 Подпишись, do it!
11 290
IT-магистратура УрФУ
УрФУ (топ-10 вузов страны) приглашает на уникальную программу, отвечающую самым остро стоящим задачам бизнеса в эпоху цифровизации: управление цифровыми проектами!
Студенты углубленно изучают:
- современные it-технологии
- методы управления информационными проектами
- продвинутые методы анализа и принятия решений в сфере it-управления
- основы разработки и прототипирования информационных систем и веб-приложений
Активная поддержка студентов бизнес-сообществом. Все льготы студента (даже отсрочка от армии). 100% онлайн.
Изучи весь потенциал цифровых технологий для бизнеса и получи диплом магистра!
Узнать больше
#реклама 16+
programs.edu.urfu.ru
О рекламодателе
11 290
👩💻 Есть опыт в проге, но не растет зп? Может нужно найти крутой оффер?
🗿 Большинство IT специалистов работает за копейки и даже не осознает этого. Лучший способ понять рынок вакансий - стать его частью и начать анализировать.
👍 Предела совершенству нет, что нельзя сказать про зп в рамках одной компании. Подпишись на Мидл работает и повышай свой капитал.
11 290
Повышенный гонорар за технические статьи в блог на Хабре
Если вы уже автор Хабра или работаете в сфере IT и чувствуете в себе творческий потенциал, то оставшиеся летние дни — прекрасная возможность посвятить себя писательскому делу!
Мы запустили акцию для технических авторов и повысили гонорар за статьи в наш блог на Хабр до 22 000 рублей. Ждем материалы о системном администрировании, программировании, хостинге и серверном оборудовании.
Акция действует до 29 августа.
Узнать больше
#реклама
firstvds.ru
О рекламодателе
11 290
📌 Как уведомить объект в сессии, что сессия недействительна или закончилась ?
💬 Спросят с вероятностью 6%
Предоставляется возможность уведомления объектов, находящихся в сессии, о том, что сессия становится недействительной или заканчивается. Для этого объекты могут реализовывать интерфейс
HttpSessionBindingListener или HttpSessionListener.
Использование HttpSessionBindingListener
Позволяет объектам узнавать, когда они добавляются или удаляются из сессии.
Методы интерфейса HttpSessionBindingListener
➕ valueBound(HttpSessionBindingEvent event): Вызывается, когда объект добавляется в сессию.
➕ valueUnbound(HttpSessionBindingEvent event): Вызывается, когда объект удаляется из сессии или когда сессия становится недействительной.
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class MySessionObject implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
// Код, который выполняется при добавлении объекта в сессию
System.out.println("Object bound to session: " + event.getSession().getId());
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// Код, который выполняется при удалении объекта из сессии или при завершении сессии
System.out.println("Object unbound from session: " + event.getSession().getId());
}
}
Добавление объекта в сессию
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/addObject")
public class AddObjectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
MySessionObject myObject = new MySessionObject();
session.setAttribute("myObject", myObject);
response.getWriter().println("Object added to session.");
}
}
Использование HttpSessionListener
Позволяет отслеживать события создания и уничтожения сессии на уровне приложения.
Методы интерфейса HttpSessionListener
➕ sessionCreated(HttpSessionEvent se): Вызывается при создании сессии.
➕ sessionDestroyed(HttpSessionEvent se): Вызывается при уничтожении сессии.
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// Код, который выполняется при создании новой сессии
System.out.println("Session created: " + se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// Код, который выполняется при завершении сессии
System.out.println("Session destroyed: " + se.getSession().getId());
}
}
Регистрация слушателей
Если вы не используете аннотации, вы можете зарегистрировать слушателей в файле web.xml.
<web-app ...>
<listener>
<listener-class>com.example.MySessionListener</listener-class>
</listener>
</web-app>
Чтобы уведомить объект в сессии о том, что сессия стала недействительной или закончилась, объект может реализовывать интерфейс HttpSessionBindingListener. Для отслеживания событий создания и уничтожения сессий на уровне приложения используется интерфейс HttpSessionListener. Оба интерфейса позволяют выполнять необходимые действия при изменении состояния сессий и управлять ресурсами эффективно.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых11 290
Как стать программистом? Технологии, веб-разработки
Команда действующих разработчиков с широкой экспертизой back и front рассказывают, как создаются веб-приложения с нуля. Паттерны, лучшие практики.
Бесплатно!
Бонусом нетоксичное сообщество и шутейки на тему.
Подписаться
#реклама
О рекламодателе
11 290
🤔 Какая коллекция в Java обеспечивает доступ по индексу?
11 290
📌 Что такое «сессия» ?
💬 Спросят с вероятностью 6%
Сессия (или сессия пользователя) в контексте веб-приложений — это способ сохранения состояния между различными запросами от одного и того же клиента (пользователя) к серверу. HTTP-протокол по своей природе является статeless (без состояния), что означает, что каждый запрос от клиента к серверу обрабатывается как независимый и не связанный с предыдущими запросами. Сессии позволяют обойти это ограничение и поддерживать непрерывное взаимодействие между клиентом и сервером.
Основные характеристики
1️⃣ Идентификатор сессии (Session ID):
➕ Уникальный идентификатор, который присваивается каждому клиенту при установлении сессии. Этот идентификатор используется для связи запросов с определенной сессией.
➕ Идентификатор сессии обычно передается клиенту через cookies или URL rewriting.
2️⃣ Сохранение состояния:
➕ Сессия позволяет хранить данные о пользователе между запросами, такие как данные аутентификации, настройки пользователя, содержимое корзины покупок и другие временные данные.
3️⃣ Время жизни сессии:
➕ Сессии имеют ограниченное время жизни. Оно может быть установлено явно и определяется периодом бездействия пользователя или временем с момента создания сессии.
🤔 Как сессии работают в сервлетах
Предоставляет интерфейс
HttpSession для работы с сессиями. Сессии могут быть созданы и использованы следующим образом:
Создание и получение сессии
Когда клиент отправляет запрос к серверу, можно получить текущую сессию или создать новую, если она еще не существует:
HttpSession session = request.getSession(true); // true означает создание новой сессии, если она отсутствует
Установка атрибутов в сессии
Можно сохранить данные в сессии, используя методы setAttribute и getAttribute:
// Установка атрибута в сессии
session.setAttribute("username", "JohnDoe");
// Получение атрибута из сессии
String username = (String) session.getAttribute("username");
Управление временем жизни сессии
Можно установить время жизни сессии (в секундах) с помощью метода setMaxInactiveInterval:
session.setMaxInactiveInterval(30 * 60); // Установка времени жизни сессии в 30 минут
Завершение сессии
Сессию можно завершить явно, вызвав метод invalidate:
session.invalidate(); // Инвалидирует текущую сессию
Пример работы с сессией в сервлете
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/sessionExample")
public class SessionExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Получение или создание новой сессии
HttpSession session = request.getSession(true);
// Установка атрибута в сессии
session.setAttribute("username", "JohnDoe");
// Получение атрибута из сессии
String username = (String) session.getAttribute("username");
out.println("<html><body>");
out.println("<h1>Session Example</h1>");
out.println("<p>Username: " + username + "</p>");
out.println("</body></html>");
}
}
Сессия — это способ сохранить состояние пользователя между различными запросами в веб-приложении. Сервлетах сессии управляются через интерфейс HttpSession, позволяя сохранять и получать данные, управлять временем жизни сессии и завершать её по необходимости. Сессии помогают обеспечивать непрерывное взаимодействие пользователя с приложением, сохраняя важную информацию между запросами.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых11 290
🤬 Постоянные ошибки, как они надоели!
🤯 Планируя свои дела, мы забываем, что оборудование может подвести. Это может перекрыть все рабочие планы. Придется гуглить, смотреть видосы, звонить знакомым "Не встречалась ли тебе такая ошибка?"
🥵 Все это время и силы. Наша команда нашла этому решение - Битый код. Канал, который даст тебе базу в мире ошибок.
🍸 Стань тем человеком, к которому будут обращаться и про которого будут говорить "Он сможет помочь"
11 290
С кем устраивать пикники и встречать рассветы?
Найди свою идеальную пару на Мамбе! Погружайся в новые знакомства и наслаждайся яркими моментами ❤️
Попробовать
#реклама 18+
click.mamba.ru
О рекламодателе
11 290
🤔 Какой тип данных используется для хранения логических значений в Java?
11 290
Школа программирования с прибылью от 200 000 ₽/мес!
Откройте франшизу международной школы программирования и математики Алгоритмика
✨Меняйте детское образование вместе с нами!
Каждый наш партнер вносит свой вклад в развитие детского образования и цифровых навыков во всем мире. Вместе мы увеличили количество учеников Алгоритмики в 2000 раз за последние 7 лет!
💻Как вы будете зарабатывать?
Ваша школа будет обучать детей навыкам будущего, а именно - учить писать код. Курсы Алгоритмики помогают развивать навыки, которые обеспечат ребенку успех в будущем и в любой профессии: критическое мышление, креативность, коммуникации, командная работа.
✅Запустим бизнес за 6 недель
💰Инвестиции от 600 000₽
📊Окупаемость от 6 месяцев
Получить предложение
#реклама
biz.algoritmika.org
О рекламодателе
11 290
📌 Зачем нужны и чем отличаются методы encodeURL() и encodeRedirectURL() ?
💬 Спросят с вероятностью 6%
Методы
encodeURL() и encodeRedirectURL() используются для URL Rewriting (перезаписи URL) с целью обеспечения корректной передачи идентификатора сессии (session ID) при управлении сессиями. Оба метода добавляют идентификатор сессии к URL, если браузер не поддерживает cookies или если cookies отключены, но они применяются в разных контекстах.
Назначение методов
1️⃣ `encodeURL(String url)`:
➕ Назначение: Используется для перезаписи URL, которые будут включены в ответ сервлета в качестве ссылок на страницы.
➕ Контекст использования: Применяется при создании гиперссылок в HTML-странице.
➕ Пример использования:
String url = response.encodeURL("http://example.com/page");
out.println("<a href=\"" + url + "\">Next Page</a>");
➕ Описание: Этот метод добавляет идентификатор сессии к URL только в том случае, если клиент не поддерживает cookies. В противном случае, метод возвращает URL без изменений.
2️⃣ encodeRedirectURL(String url):
➕ Назначение: Используется для перезаписи URL, которые будут использоваться в методах редиректа (sendRedirect).
➕ Контекст использования: Применяется при выполнении редиректа на другую страницу.
➕ Пример использования:
String url = response.encodeRedirectURL("http://example.com/page");
response.sendRedirect(url);
➕ Описание: Этот метод также добавляет идентификатор сессии к URL, если клиент не поддерживает cookies. Он специально предназначен для обработки URL в контексте перенаправления запросов.
Примеры
С encodeURL
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Генерация URL с перезаписью идентификатора сессии для гиперссылки
String url = response.encodeURL("http://example.com/nextPage");
out.println("<html><body>");
out.println("<a href=\"" + url + "\">Next Page</a>");
out.println("</body></html>");
}
}
С encodeRedirectURL
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/redirectExample")
public class RedirectExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Генерация URL с перезаписью идентификатора сессии для редиректа
String url = response.encodeRedirectURL("http://example.com/nextPage");
// Перенаправление на другой URL
response.sendRedirect(url);
}
}
Методы encodeURL() и encodeRedirectURL() предназначены для перезаписи URL с добавлением идентификатора сессии, если браузер не поддерживает cookies. encodeURL используется для создания гиперссылок, включаемых в ответ сервлета, а encodeRedirectURL — для URL, используемых в редиректах. Эти методы обеспечивают корректное управление сессиями и поддерживают взаимодействие с клиентами независимо от их поддержки cookies.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых11 290
Jobski - твой помощник при поиске работы в IT
Сервис индивидуально подбирает вакансии, учитывая ваш опыт, навыки и стек технологий.
Узнать больше
#реклама
jobski.ru
О рекламодателе
11 290
📌 Что такое URL Rewriting ?
💬 Спросят с вероятностью 6%
URL Rewriting (перезапись URL) — это метод управления сессиями в веб-приложениях, при котором идентификатор сессии передается в качестве части URL. Этот метод используется, когда cookies отключены или не поддерживаются клиентом. Позволяет серверу сохранять информацию о пользователе и отслеживать его сессию между запросами.
Как он работает
Вместо использования cookies для передачи идентификатора сессии, он включается в каждый URL, который сервер отправляет клиенту. Например, URL может выглядеть так:
http://example.com/page;jsessionid=1234567890.
Примеры:
С сервлетом
В сервлетах может быть осуществлен с помощью метода HttpServletResponse.encodeURL(String url).
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Получение идентификатора сессии
String sessionId = request.getSession().getId();
// Генерация URL с перезаписью идентификатора сессии
String url = response.encodeURL("http://example.com/nextPage");
// Включение URL в HTML
out.println("<html><body>");
out.println("<a href=\"" + url + "\">Next Page</a>");
out.println("</body></html>");
}
}
В этом примере метод encodeURL автоматически добавляет идентификатор сессии к URL, если браузер не поддерживает cookies.
Важные моменты
1️⃣ Поддержка сервером:
➕ URL Rewriting требует поддержки со стороны сервера. Сервер должен уметь извлекать идентификатор сессии из URL и связывать его с сессией пользователя.
2️⃣ Безопасность:
➕ Идентификатор сессии виден в URL, что делает его уязвимым для атак, таких как перехват URL и повторное использование сессии. Использование HTTPS помогает снизить этот риск.
3️⃣ Прочность и масштабируемость:
➕ URL с идентификаторами сессий могут быть закэшированы или сохранены в закладках, что может привести к проблемам с устаревшими сессиями. Важно учитывать это при проектировании приложения.
4️⃣ Производительность:
➕ URL Rewriting может добавить накладные расходы на производительность, так как каждый URL должен быть изменен для включения идентификатора сессии.
URL Rewriting — это метод передачи идентификатора сессии в URL, используемый для управления сессиями, когда cookies недоступны. Это обеспечивает возможность отслеживания сессий между запросами, но может представлять проблемы безопасности и производительности. Правильное использование в сочетании с другими методами управления сессиями помогает обеспечить надежную работу веб-приложений.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых11 290
Мечтаешь о карьере в бигтехе?
Приходи на интенсив в Открытые школы Т1 для Java-разработчиков с опытом от года. Лучшие выпускники получат оффер от Т1 — крупнейшей ИТ-компании по версии RAEX 2023🔝 и уникальный карьерный фаст-трек до мидла в бигтехе.
В портфеле Холдинга Т1 800+ масштабных проектов и 70+ продуктов и услуг.
🧠 Всего за полгода мы выпустили 500+ специалистов. Участники присоединились к командам финтех-разработки и разработки ИТ-продуктов. Выпускников также ждут в юнитах облачных сервисов, развития ИИ-решений, интеграции и консалтинга.
Программа курса: spring framework; docker; синхронное и асинхронное взаимодействие, брокеры сообщений; паттерны, SOLID.
⌛️ Быстрое обучение: 1 месяц.
💻Гибкий формат: все этапы онлайн, занятия по вечерам.
Готов прокачаться вместе с экспертами индустрии? Тогда подавай заявку до 22 августа!
Старт интенсива — 28 августа.
Реклама. ООО "Т1". ИНН 7720484492.
11 290
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
