#Собес #promise
🤔 На смену чего пришли промисы и какие у них основные состояния?
💬 Кратко:
Промисы пришли на смену callback hell и предоставили более чистый способ работы с асинхронными операциями. Промис имеет три состояния: pending (ожидание), fulfilled (выполнено успешно) и rejected (выполнено с ошибкой). После перехода в fulfilled или rejected состояние промиса больше не меняется.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 На смену чего пришли промисы и какие у них основные состояния?
💬 Кратко:
Промисы пришли на смену callback hell и предоставили более чистый способ работы с асинхронными операциями. Промис имеет три состояния: pending (ожидание), fulfilled (выполнено успешно) и rejected (выполнено с ошибкой). После перехода в fulfilled или rejected состояние промиса больше не меняется.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #osi #model
🤔 Что такое транспортный уровень в модели OSI?
💬 Кратко:
Транспортный уровень (4-й уровень модели OSI) отвечает за надёжную доставку данных между приложениями на разных хостах.
- Его главная задача — обеспечить сквозное соединение, то есть связь не между компьютерами, а между конкретными программами на них (например, между веб-браузером и веб-сервером).
- Для этого он использует порты — уникальные номера, которые идентифицируют приложения на одном устройстве (например, порт 80 для HTTP).
- На этом уровне работают два ключевых протокола: TCP, который гарантирует надёжную, упорядоченную доставку, и UDP, который обеспечивает быструю, но ненадёжную доставку без гарантий.
- Транспортный уровень также может управлять скоростью передачи данных, чтобы не перегрузить получателя (контроль потока).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Что такое транспортный уровень в модели OSI?
💬 Кратко:
Транспортный уровень (4-й уровень модели OSI) отвечает за надёжную доставку данных между приложениями на разных хостах.
- Его главная задача — обеспечить сквозное соединение, то есть связь не между компьютерами, а между конкретными программами на них (например, между веб-браузером и веб-сервером).
- Для этого он использует порты — уникальные номера, которые идентифицируют приложения на одном устройстве (например, порт 80 для HTTP).
- На этом уровне работают два ключевых протокола: TCP, который гарантирует надёжную, упорядоченную доставку, и UDP, который обеспечивает быструю, но ненадёжную доставку без гарантий.
- Транспортный уровень также может управлять скоростью передачи данных, чтобы не перегрузить получателя (контроль потока).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
❤1
#course #задачи #тесты
📚 JavaScript. A3 Задачи
Задачи на программирования на языке JavaScript, формат ввода-вывода делает задачи похожими на задачи на других языка программирования. В курсе используется синтаксис современного стандарта ES6.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 JavaScript. A3 Задачи
Задачи на программирования на языке JavaScript, формат ввода-вывода делает задачи похожими на задачи на других языка программирования. В курсе используется синтаксис современного стандарта ES6.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #lifecycle #hook #component
🤔 Какие хуки жизненного цикла существуют у Vue-компонента?
💬 Кратко:
Vue-компонент проходит несколько этапов: создание, монтирование, обновление и уничтожение. Для каждого этапа существуют специальные хуки жизненного цикла. Они позволяют выполнять код в нужный момент времени. Например, инициализировать данные или очистить ресурсы. Знание этих хуков важно для управления логикой компонента.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие хуки жизненного цикла существуют у Vue-компонента?
💬 Кратко:
Vue-компонент проходит несколько этапов: создание, монтирование, обновление и уничтожение. Для каждого этапа существуют специальные хуки жизненного цикла. Они позволяют выполнять код в нужный момент времени. Например, инициализировать данные или очистить ресурсы. Знание этих хуков важно для управления логикой компонента.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #keep #alive #activated
🤔 Какие хуки жизненного цикла вызываются при использовании keep-alive?
💬 Кратко:
При использовании
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие хуки жизненного цикла вызываются при использовании keep-alive?
💬 Кратко:
При использовании
keep-alive компоненты не уничтожаются при скрытии. Вместо стандартных хуков уничтожения используются специальные хуки активации и деактивации. Это activated и deactivated. Они позволяют реагировать на повторное отображение компонента. Такой механизм используется для кэширования состояния.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #http #get #post
🤔 Какие стандартные HTTP-методы существуют?
💬 Кратко:
Основные HTTP-методы: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. GET используется для получения данных, POST — для создания или обработки, PUT — для полной замены ресурса, PATCH — для частичного изменения, DELETE — для удаления. HEAD возвращает только заголовки, а OPTIONS сообщает доступные методы. Методы отличаются не только назначением, но и семантикой и идемпотентностью.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие стандартные HTTP-методы существуют?
💬 Кратко:
Основные HTTP-методы: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. GET используется для получения данных, POST — для создания или обработки, PUT — для полной замены ресурса, PATCH — для частичного изменения, DELETE — для удаления. HEAD возвращает только заголовки, а OPTIONS сообщает доступные методы. Методы отличаются не только назначением, но и семантикой и идемпотентностью.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#tool #инструменты
📚 IT-Tools
IT-Tools — это веб-приложение с набором инструментов для разработчиков и ИТ-специалистов!
Оно предлагает функции для обработки текста, кодирования и декодирования данных, работы с хешами, базами данных, а также инструменты для работы с сетью, JSON и другими форматами.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 IT-Tools
IT-Tools — это веб-приложение с набором инструментов для разработчиков и ИТ-специалистов!
Оно предлагает функции для обработки текста, кодирования и декодирования данных, работы с хешами, базами данных, а также инструменты для работы с сетью, JSON и другими форматами.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #typescript #compilation
🤔 В чем плюсы и минусы TS.
💬 Кратко:
TypeScript добавляет статическую типизацию, что улучшает качество кода и уменьшает ошибки. Однако он требует компиляции и имеет более сложную настройку. Подходит для больших проектов и командной разработки.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 В чем плюсы и минусы TS.
💬 Кратко:
TypeScript добавляет статическую типизацию, что улучшает качество кода и уменьшает ошибки. Однако он требует компиляции и имеет более сложную настройку. Подходит для больших проектов и командной разработки.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #render #script #async
🤔 Как event loop влияет на парсинг HTML и как этого избежать?
💬 Кратко:
Event loop может приостанавливать парсинг HTML, если JavaScript выполняется во время загрузки страницы. Когда браузер встречает тег
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как event loop влияет на парсинг HTML и как этого избежать?
💬 Кратко:
Event loop может приостанавливать парсинг HTML, если JavaScript выполняется во время загрузки страницы. Когда браузер встречает тег
<script>, он останавливает парсинг и выполняет скрипт, что может замедлить загрузку страницы. Чтобы избежать этого, разработчики могут использовать атрибуты async или defer, которые позволяют загружать и выполнять скрипты асинхронно, не блокируя парсинг.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
❤1
#Собес #explain #query #plan
🤔 Как определить, используется ли индекс в запросе?
💬 Кратко:
Для этого используют план выполнения запроса. В PostgreSQL —
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как определить, используется ли индекс в запросе?
💬 Кратко:
Для этого используют план выполнения запроса. В PostgreSQL —
EXPLAIN и EXPLAIN ANALYZE. Если в плане указан Index Scan или Index Only Scan, значит индекс используется. Это основной и надёжный способ проверки.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
❤1
#tool #профиль
📚 Awesome GitHub Profile: ваш профессиональный бренд в цифровом мире
Это уникальный инструмент для персонализации вашего GitHub-профиля, который поможет вам создать впечатляющее портфолио и выделиться среди других разработчиков.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Awesome GitHub Profile: ваш профессиональный бренд в цифровом мире
Это уникальный инструмент для персонализации вашего GitHub-профиля, который поможет вам создать впечатляющее портфолио и выделиться среди других разработчиков.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
❤1
#Собес #cookies #security #http-only
🤔 Какие флаги есть у куки (например, HttpOnly, Secure)?
💬 Кратко:
Основные флаги:
-
-
-
-
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие флаги есть у куки (например, HttpOnly, Secure)?
💬 Кратко:
Основные флаги:
-
HttpOnly: Запрещает доступ к куки через JavaScript (защита от XSS).-
Secure: Передача только по HTTPS.-
SameSite: Защита от CSRF (Strict, Lax, None).-
Expires/Max-Age: Время жизни куки.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
❤3
#Собес #callback #context
🤔 Как получить доступ к самому массиву внутри колбэка?
💬 Кратко:
Сам массив передаётся в колбэк третьим аргументом. Это стандартное поведение методов массивов JavaScript. Благодаря этому колбэк имеет доступ ко всему массиву. Такой подход позволяет писать более гибкие условия. Он используется во всех методах итерации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как получить доступ к самому массиву внутри колбэка?
💬 Кратко:
Сам массив передаётся в колбэк третьим аргументом. Это стандартное поведение методов массивов JavaScript. Благодаря этому колбэк имеет доступ ко всему массиву. Такой подход позволяет писать более гибкие условия. Он используется во всех методах итерации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #atomicity #consistency #isolation
🤔 Какие свойства есть у транзакции?
💬 Кратко:
У транзакции четыре ключевых свойства ACID: атомарность (all or nothing), согласованность (соблюдение правил и ограничений), изолированность (отсутствие влияния параллельных транзакций) и долговечность (сохранение изменений после фиксации).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие свойства есть у транзакции?
💬 Кратко:
У транзакции четыре ключевых свойства ACID: атомарность (all or nothing), согласованность (соблюдение правил и ограничений), изолированность (отсутствие влияния параллельных транзакций) и долговечность (сохранение изменений после фиксации).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#documentation #микросервисы #паттерны
📚 Паттерны управления данными в микросервисной архитектуре
Microservices.io создан Крисом Ричардсоном. опытным архитектором программного обеспечения, автором книги POJOs in Action, создателем оригинальной платформы CloudFoundry.com и автором шаблонов микросервисов.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Паттерны управления данными в микросервисной архитектуре
Microservices.io создан Крисом Ричардсоном. опытным архитектором программного обеспечения, автором книги POJOs in Action, создателем оригинальной платформы CloudFoundry.com и автором шаблонов микросервисов.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #utility
🤔 Где могут быть полезны mapped types?
💬 Кратко:
Mapped Types (отображаемые типы) полезны, когда вам нужно создать новый тип на основе старого, применив одно и то же преобразование ко всем свойствам исходного типа. Они идеально подходят для задач, где требуется сделать все свойства опциональными (
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Где могут быть полезны mapped types?
💬 Кратко:
Mapped Types (отображаемые типы) полезны, когда вам нужно создать новый тип на основе старого, применив одно и то же преобразование ко всем свойствам исходного типа. Они идеально подходят для задач, где требуется сделать все свойства опциональными (
Partial<T>), доступными только для чтения (Readonly<T>), или выбрать подмножество свойств по их именам. Это мощный инструмент для избежания рутинного дублирования кода при определении схожих типов.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #reduce #accumulator
🤔 Как устроена функция reduce в JavaScript и для чего она используется?
💬 Кратко:
Функция
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как устроена функция reduce в JavaScript и для чего она используется?
💬 Кратко:
Функция
reduce используется для последовательной обработки элементов массива с сохранением промежуточного результата. Она принимает функцию обратного вызова, которая получает два аргумента — аккумулятор и текущий элемент массива.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #two_phase_commit #distributed_transaction
🤔 Почему «отправка в брокер до коммита» не решает транзакционность с двумя очередями?
💬 Кратко:
С двумя независимыми очередями вы упираетесь в проблему двойной записи и отсутствие атомарности между БД и обоими брокерами. Без 2PC (дорого/редко доступно) единственный практичный путь — Outbox + идемпотентные публикации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Почему «отправка в брокер до коммита» не решает транзакционность с двумя очередями?
💬 Кратко:
С двумя независимыми очередями вы упираетесь в проблему двойной записи и отсутствие атомарности между БД и обоими брокерами. Без 2PC (дорого/редко доступно) единственный практичный путь — Outbox + идемпотентные публикации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#book #javascript #иб
📚 Node.js в действии
Авторы: Алекс Янг, Майк Кантело
Учебник расскажет о системах разработки интерфейса, а также часто встречающемся фреймворке Node. После прочтения начинающие специалисты научатся создавать приложения на основе Express. Автор предоставляет информацию о:
JavaScript
Системе проектирования frontend
Выборе фреймворка
Работе с ИБ
Тестировании и развертывании приложений
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Node.js в действии
Авторы: Алекс Янг, Майк Кантело
Учебник расскажет о системах разработки интерфейса, а также часто встречающемся фреймворке Node. После прочтения начинающие специалисты научатся создавать приложения на основе Express. Автор предоставляет информацию о:
JavaScript
Системе проектирования frontend
Выборе фреймворка
Работе с ИБ
Тестировании и развертывании приложений
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #var #let #closure
🤔 Почему при использовании var в цикле получаются одинаковые значения?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Почему при использовании var в цикле получаются одинаковые значения?
💬 Кратко:
var имеет функциональную область видимости, а не блочную. В цикле все итерации используют одну и ту же переменную, поэтому в замыканиях получается последнее значение.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
Forwarded from YeaHub
Февраль и март выдались для нас непростыми. Мы прошли через сложную миграцию и разделили проект на два отдельных продукта.
Теперь у нас есть:
— yeahub.ru — публичная SEO-ориентированная часть на Next.js с быстрым серверным рендерингом
— app.yeahub.ru — основное приложение: личный кабинет пользователя со статистикой, прогрессом и аналитикой
🔥 Лайвкодинг — наконец-то готов
Мы серьезно прокачали сервис лайвкодинга:
— добавили привязку задач к коллекциям (собеседованиям)
— сделали связь с компаниями
— теперь можно готовиться по задачам с реальных собеседований
Уже доступны задачи из: Сбер, Яндекс, Авито, VK, Ozon, Т-Банк и других компаний.
📌 Сейчас добавлено ~100 задач.
Да, это меньше, чем планировали — но пришлось сделать шаг назад, чтобы сделать десять вперед.
Мы полностью переработали:
— шаблон задач
— систему тесткейсов
Ранее была допущена ошибка, из-за которой пришлось вручную исправить 80+ задач 😢
Но теперь база готова к масштабированию — и мы можем быстро и правильно наполнять её дальше.
📈 Что дальше по лайвкодингу
Мы будем активно развивать этот сервис.
Это не только про собеседования — это инструмент для роста и прокачки.
Планируется много новых фич.
📅 Регулярные обновления контента
Мы выстроили процесс: каждую неделю 4–8 собеседований, 6–10 задач
И каждое обновление будем анонсировать, чтобы вы всегда были в курсе.
🛠 Сейчас в разработке (2 ключевых сервиса)
Агрегатор вакансий + платформа размещения вакансий
ATS-оптимизация резюме
— Бэкенд почти готов.
— Идёт дизайн.
— Фронтенд начнем совсем скоро.
🎯 Цель — выпустить оба сервиса в бэта до лета.
🧠 Новая структура обучения
Раньше было: Навык → Вопрос
Теперь: Навык → Тема → Вопрос
Это сильно упрощает обучение.
Теперь можно: готовиться точечно к собеседованиям или системно изучать темы
💻 Мы — open source
Мы не бросаем слов на ветер. Мы делаем.
Код проекта открыт https://github.com/YeaHubTeam:
— фронтенд
— мобильные приложения
— backend на Python (решили новый сервис делать публично, для новичков)
— автотесты
Это open source платформа, где новички могут учиться и смотреть на реальные практики.
❤️ Поддержка
Вы можете поддержать нас, оформив подписку. Это напрямую влияет на:
— добавление контента
— развитие платформы
— новые фичи
Вы можете быть уверены — мы не стоим на месте. Работа реально кипит: почти каждый день мержатся новые фичи, мы постоянно развиваем продукт и улучшаем уже существующие сервисы.
У нас полностью открытый код, и это не просто слова. Вы в любой момент можете зайти и посмотреть активность, коммиты и то, как проект развивается каждый день.
По подписке: сейчас стоимость — 800 рублей за месяц и 1800 рублей за 3 месяца. Это уже ниже, чем у аналогичных сервисов. При этом важно понимать — после выхода новых сервисов (агрегатор вакансий и ATS для резюме) цена будет пересмотрена.
Если хотите зафиксировать текущую стоимость — лучше сделать это сейчас:
https://app.yeahub.ru/settings#select-tariff
Мы строим продукт.
Мы двигаемся вперёд.
И мы делаем IT снова великим.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1