Библиотека собеса по PHP | вопросы с собеседований
3.38K subscribers
140 photos
2 videos
68 links
Вопросы с собеседований по PHP и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f3affba

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Что подразумевается под понятием «триггер» в SQL?

Триггер в SQL — это предопределенный SQL-код, который автоматически выполняется (или «срабатывает») в ответ на определенные события в таблице или представлении базы данных. Триггеры могут быть использованы для автоматизации выполнения определенных действий при вставке, обновлении или удалении данных в таблице. Они предоставляют способ добавления бизнес-логики к базе данных.

Примеры событий, на которые могут реагировать триггеры:

AFTER INSERT (После вставки данных): Триггер срабатывает после вставки новой записи в таблицу.

AFTER UPDATE (После обновления данных): Триггер срабатывает после обновления существующей записи в таблице.

AFTER DELETE (После удаления данных): Триггер срабатывает после удаления записи из таблицы.

BEFORE INSERT (Перед вставкой данных): Триггер срабатывает перед вставкой новой записи в таблицу. Он может использоваться, чтобы модифицировать данные перед их вставкой.

BEFORE UPDATE (Перед обновлением данных): Триггер срабатывает перед обновлением существующей записи в таблице. Он может использоваться для проверки или модификации данных перед обновлением.

BEFORE DELETE (Перед удалением данных): Триггер срабатывает перед удалением записи из таблицы. Он может использоваться для проверки или сохранения данных перед удалением.
Каков жизненный цикл запроса в laravel?

Жизненный цикл запроса в Laravel представляет собой последовательность этапов, через которые проходит HTTP-запрос, поступающий в приложение, до того момента, когда генерируется HTTP-ответ. Этот процесс включает в себя несколько шагов:

Инициализация (Bootstrap):

Запрос поступает на веб-сервер (например, Nginx или Apache), который перенаправляет его на index.php файл в корне Laravel приложения.
index.php файл загружает автозагрузчик Composer и инициализирует приложение, вызывая файл bootstrap/app.php.

Создание объекта приложения:

В bootstrap/app.php создается объект приложения, экземпляр класса Illuminate\Foundation\Application.
Конфигурация приложения загружается, а также подключаются различные сервис-провайдеры.

Загрузка сервис-провайдеров:

Сервис-провайдеры, указанные в config/app.php, регистрируются и запускаются.
Эти провайдеры настраивают различные аспекты приложения, такие как маршрутизация, базы данных, очереди и многое другое.

Обработка Middleware:

Laravel начинает обработку глобальных middleware, которые определены в файле app/Http/Kernel.php.
Эти middleware могут обрабатывать запросы до и после их обработки контроллерами, занимаясь такими задачами, как аутентификация, сессии и управление CORS.

Маршрутизация:

Запрос передается в маршрутизатор, который определяет, какой контроллер и метод должны обработать запрос, основываясь на URI и HTTP-методе.
Маршрутизация может быть определена в файлах routes/web.php, routes/api.php и других файлах маршрутов.

Обработка контроллером:

Маршрутизатор вызывает соответствующий метод контроллера.
Контроллер может взаимодействовать с моделями, сервисами и другими компонентами для обработки бизнес-логики запроса.

Генерация ответа:

Контроллер возвращает ответ, который может быть представлением (view), JSON-данными или другим типом ответа.
Этот ответ оборачивается в объект Illuminate\Http\Response.

Обработка завершающих Middleware:

Перед отправкой клиенту, ответ проходит через завершающие middleware (например, для управления сессиями или кешем).

Отправка ответа клиенту:

Обработанный ответ отправляется веб-серверу, который передает его обратно клиенту (например, браузеру).

Завершение запроса:

Любые завершающие операции, такие как закрытие соединений с базой данных или очистка сессий, выполняются перед окончанием жизненного цикла запроса.
Как работает session в РНР, где хранится, как инициализируется?

В PHP, сессия — это механизм, который позволяет сохранять данные о состоянии пользователя между разными запросами на сервере.

Сессия инициализируется следующим образом:
Сначала нужно вызвать функцию session_start(), которая инициализирует или возобновляет уже существующую сессию для текущего пользователя. Если сессия уже инициализирована, функция просто возобновляет ее.

После вызова session_start(), PHP создает уникальный идентификатор сессии (называемый session ID), который может быть сохранен в виде cookie на стороне клиента или передан через URL (если отключены куки). ID сессии используется для связи данных сессии между разными запросами.

Данные сессии хранятся на сервере. По умолчанию, PHP сохраняет данные сессии во временной директории на сервере. Местоположение директории можно настроить в php.ini с помощью параметра session.save_path. Каждая сессия имеет свой собственный файл, который называется session file.

В файле сессии хранятся данные, которые могут быть доступны пока сессия открыта. Эти данные могут быть сохранены в массиве $_SESSION, который доступен на протяжении всей сессии и содержит данные, заданные разработчиком.
Для чего используется Symfony Event Dispatcher?

Компонент Symfony Event Dispatcher используется для управления и обработки событий в приложении Symfony. Он обеспечивает способ разъединения различных частей приложения, что позволяет сделать код более модульным и поддерживаемым. Вот для чего он используется:

1. Разъединение компонентов: Event Dispatcher позволяет различным компонентам или сервисам в приложении взаимодействовать друг с другом, не будучи жестко связаными. Это означает, что одна часть приложения может вызвать событие, а другие части могут прослушивать это событие и реагировать на него, не зная друг о друге.

2. Обработка событий: Он предоставляет способ определения событий и регистрации слушателей событий. Когда событие создается (dispatch), все зарегистрированные слушатели этого события уведомляются и могут выполнить свою логику. Это полезно для реализации хуков или точек расширения в приложении.

3. Модульность и повторное использование: Используя события, вы можете сделать ваш код более модульным и повторно используемым. Разные части вашего приложения могут подписываться на события и реагировать на них, что упрощает добавление или удаление функционала без изменения основной логики.

4. Расширяемость: Event Dispatcher позволяет легко расширять приложение. Сторонние пакеты или компоненты могут подключаться к событиям вашего приложения и добавлять или изменять поведение без необходимости изменять существующую кодовую базу.

5. Асинхронная обработка: События могут использоваться для запуска асинхронной обработки. Например, после регистрации пользователя может быть вызвано событие, которое запускает отправку приветственного письма или логирование активности, что может обрабатываться асинхронно слушателями.

Ключевые концепции

🔸Событие: Сообщение или сигнал, указывающий на то, что что-то произошло. Оно содержит информацию о событии и может использоваться для передачи данных слушателям.

🔸Event Dispatcher: Сервис, отвечающий за создание событий и уведомление всех зарегистрированных слушателей.

🔸Слушатель событий: Функция или метод, который выполняется в ответ на конкретное событие.

🔸 Слушатели регистрируются в Event Dispatcher.

🔸Подписчик на события: Класс, который регистрирует несколько слушателей для разных событий. Он реализует интерфейс EventSubscriberInterface и определяет, какие события его интересуют и соответствующие методы для вызова.
Как использовать переменные окружения в Laravel?

Laravel позволяет определять переменные окружения для вашего приложения, которые можно использовать для хранения конфиденциальной информации или конфигурационных данных, которые должны быть разными в зависимости от окружения (например, разработка, staging, production)

В этом примере мы определили переменную окружения под названием APP_NAME в файле .env. Затем мы можем получить эту переменную в нашем коде с помощью функции env.
Как устроен Singleton и почему его считают антипатерном?

Синглтон (Singleton) — это порождающий паттерн проектирования, который обеспечивает, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.

Теперь рассмотрим, почему Синглтон часто считают антипаттерном:

1️⃣Глобальное состояние: Использование глобального объекта (в данном случае, единственного экземпляра класса) может привести к созданию глобального состояния, что затрудняет тестирование и усложняет понимание потока управления программы.

2️⃣Сложность в тестировании: Синглтоны могут вызывать проблемы при тестировании, так как они создают глобальные зависимости, которые не всегда легко подменить для модульного тестирования.

3️⃣Проблемы с наследованием: Наследование от Синглтона может стать проблемой, так как он имеет статическую точку доступа, которая не всегда вписывается в иерархию наследования.

4️⃣Сложность в масштабировании: Использование Синглтона может затруднить масштабирование системы, так как он создает глобальную точку зависимости, которая может стать узким местом.

5️⃣Проблемы с потокобезопасностью: Реализации Синглтона, как правило, не потокобезопасны по умолчанию, что может привести к проблемам в многопоточных приложениях.
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
Когда Symfony отказывает пользователю в доступе?

Когда неавторизованный пользователь пытается получить доступ к веб-приложению, Symfony отказывает ему в доступе. Он отображает страницу ошибки и возвращает HTTP-статус 403. Ошибка Access Denied, как следует из названия, на веб-странице означает, что веб-сервер отклонил ваш запрос на просмотр, либо потому, что веб-сервер работает неправильно, либо потому, что у вас нет правильных учетных данных.
Какие типы связей в базе данных?

Существует три типа связей между таблицами в базе данных:

«Один-к-одному» или 1:1. Это означает, что каждой записи в первой таблице соответствует не более одной записи во второй таблице, и наоборот.

«Один-ко-многим» или 1:M. Это означает, что одному экземпляру сущности может соответствовать любое количество (M) экземпляров другой сущности.

«Многие-ко-многим» или M:N. Это означает, что нескольким экземплярам одной сущности может соответствовать несколько экземпляров другой сущности.
Как использовать каталог хранилищ в Laravel?

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

В этом примере мы сохраняем файл в каталоге uploads внутри каталога storage с помощью метода store. Затем мы можем получить файл с помощью метода get и удалить его с помощью метода delete.
Как в PHP очистить память?

В PHP память очищается автоматически после окончания выполнения скрипта. Однако, есть несколько способов управлять памятью для оптимизации работы скрипта:

1. Очистка переменных: Удалив все ссылки на объект или массив, PHP автоматически освободит память, занимаемую ими. Использование функции `unset()` позволяет явно удалить переменную или ее элементы.

2. Освобождение памяти после работы с большими массивами: Для этого можно использовать функцию `unset()` или присвоить переменной пустое значение (`$var = null`), чтобы удалить ссылку на массив и освободить память.

3. Использование `unset()` после работы с объектами: Аналогично предыдущему пункту, нужно удалить ссылку на объект, чтобы очистить память. Если объект был инициализирован с помощью конструктора, то вызов `unset()` может привести к вызову деструктора объекта.

4. Использование `gc_collect_cycles()`: Функция `gc_collect_cycles()` используется для принудительного вызова сборщика мусора, который освобождает память, занимаемую неиспользуемыми объектами и циклами ссылок.

5. Управление памятью экстенсионных функций: Если используются расширения PHP, следует обратить внимание на их документацию, так как некоторые расширения могут предоставлять специальные функции для управления памятью.

Но в целом, в PHP не требуется явно очищать память, так как это автоматически выполняется сборщиком мусора. Однако, правила управления памятью в PHP важно понимать, чтобы написанный код был максимально эффективным и не вызывал утечек памяти.
Что означает сложность алгоритма?

Сложность алгоритма представляет собой меру его эффективности и определяет количество ресурсов, таких как время и память, необходимых для его выполнения.

Существуют два основных типа сложности алгоритма: временная сложность и пространственная сложность.

Временная сложность алгоритма оценивает время, необходимое для его выполнения, в зависимости от размера входных данных. Обычно время выполнения алгоритма измеряется в тактах процессора или в секундах. Примеры временной сложности включают константную сложность O(1) (выполнение за постоянное время), линейную сложность O(n) (выполнение занимает время, пропорциональное размеру входных данных) и квадратичную сложность O(n^2) (выполнение занимает время, пропорциональное квадрату размера входных данных).

Пространственная сложность алгоритма оценивает объем памяти, необходимый для его выполнения, в зависимости от размера входных данных. Обычно пространственная сложность измеряется в байтах. Примеры пространственной сложности включают константную сложность O(1) (не зависит от размера входных данных), линейную сложность O(n) (потребляет память, пропорционально размеру входных данных) и квадратичную сложность O(n^2) (потребляет память, пропорционально квадрату размера входных данных).
Что такое идемпотентность?

Идемпотентность — это свойство операции, которое означает, что повторное ее выполнение не приводит к изменению состояния системы после первого выполнения. В контексте веб-разработки и использования HTTP методов, идемпотентность означает, что повторный запрос с одним и тем же набором параметров не изменит состояние сервера.

Это важное понятие для разработчиков, потому что идемпотентные операции обеспечивают безопасность и надежность системы, позволяя повторять запросы в случае, если они не достигли сервера или были обработаны, но клиент не получил ответа.

Вот несколько примеров идемпотентных операций:

1. Чтение данных: Операция получения данных из базы данных с помощью SELECT является идемпотентной, потому что повторное выполнение запроса не изменит состояние базы данных.

2. Удаление записи: Операция DELETE является идемпотентной, поскольку повторное выполнение запроса на удаление записи не приведет к ошибке и не изменит состояние базы данных, так как запись уже удалена.

3. Обновление записи: Если обновление записи происходит на основе идентификатора записи и одинаковые значения обновляются несколько раз, то запрос UPDATE будет идемпотентным.
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Как вы используете пагинацию в Laravel?

Laravel предоставляет простой способ постраничной обработки записей базы данных с помощью метода paginate.

В этом примере мы используем метод paginate для получения коллекции пользователей и разбивки результатов на страницы по 10 записей в каждой. Затем мы можем выполнить итерацию по пагинированной коллекции с помощью цикла foreach.

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

Антипатерны (англ. antipatterns) — это плохие практики в программировании, дизайне и разработке, которые могут привести к проблемам, сложности в сопровождении кода, и общему ухудшению качества программного продукта.

1. Analytical paralysis
Аналитический паралич — считается классическим организационным антипаттерном. Его суть заключается в чрезмерном анализировании ситуации при планировании, так что решение или действие не предпринимаются, по сути парализуя разработку. Зачастую это случается в тех случаях, когда цель состоит в достижении совершенства и полной завершенности периода анализа. Этот антипаттерн характеризуется хождением по кругу (такой себе замкнутый цикл), пересмотром и созданием детальных моделей, что в свою очередь мешает рабочему процессу.

К примеру, вы пытаетесь предугадать вещи уровня: а что если вдруг пользователь захочет создать список сотрудников на основе четвертых и пятых букв их имени, с включением в список проектов, которым они уделили больше всего рабочих часов между Новым Годом и Восьмым марта за четыре предыдущих года? По сути это переизбыток анализа.

2. Spaghetti code
Спагетти-код — это антипаттерн, описывающий часть кода, которая является плохо структурированной, запутанной и трудной для понимания, содержащей много всяких переходов, каких как: оборачивание исключений, условий, циклов.

3.Magic numbers
Магическое числа — это антипаттерн, который затрагивает разнородные константы и переменные в программе без пояснения их цели, смысла. То есть, как правило нет адекватного имени или на крайний случай, комментария, поясняющего, что и зачем. Также как и спагетти код, является одним из наиболее распространённых антипаттернов.

Человек, который не является автором данного кода, с трудом может или вовсе не может объяснить, что это и как оно работает (да и сам автор со временем не сможет). В итоге при изменении этого числа или его удалении код магически перестает работать вовсе.
Какие различия между первичным и уникальным ключами?

«Первичный ключ» (Primary Key) и «уникальный ключ» (Unique Key) — это оба типа ограничений баз данных, используемых для обеспечения уникальности значений в столбцах таблиц. Однако существуют определенные различия в их использовании и семантике:

Уникальность:

Первичный ключ: Одна из основных особенностей первичного ключа — это то, что он должен быть уникальным для каждой записи в таблице. Он не может содержать значения NULL, и каждая строка в таблице должна иметь уникальное значение первичного ключа.

Уникальный ключ: Уникальный ключ также гарантирует уникальность значений в столбце или группе столбцов. Однако в отличие от первичного ключа, столбец, имеющий уникальный ключ, может содержать значение NULL, и таблица может иметь несколько строк с NULL в уникальном ключе.

NULL-значения:

Первичный ключ: Не может содержать NULL-значений. Все значения первичного ключа должны быть заполнены.

Уникальный ключ: Может содержать одно NULL-значение. Если столбец с уникальным ключом разрешает NULL, то однако может быть только одна строка с NULL в этом столбце.

Число ключей:

Первичный ключ: В таблице может быть только один первичный ключ.

Уникальный ключ: В таблице может быть несколько уникальных ключей. Каждый уникальный ключ предоставляет другой способ гарантировать уникальность значений.

Семантика использования:

Первичный ключ: Используется для однозначной идентификации каждой строки в таблице. Часто используется в качестве внешнего ключа в других таблицах.

Уникальный ключ: Используется для обеспечения уникальности значений, но не обязательно для идентификации каждой строки. Может использоваться, например, для уникальных номеров телефонов или электронных адресов в таблице клиентов.
Какая разница между замыканием в PHP и JavaScript?

Замыкание в PHP и JavaScript имеют некоторые сходства, но также имеют и некоторые различия.

В PHP:

1. Замыкание, так же как и функция, является объектом, который можно присвоить переменной.
2. В PHP замыкания создаются с использованием анонимных функций с помощью ключевого слова `function`.
3. Замыкания в PHP в основном используются для создания анонимных функций, которые могут захватывать и использовать переменные из объемлющего контекста.
4. Замыкания в PHP имеют доступ только к переменным, которые были явно переданы в них или объявлены в объемлющей функции с помощью ключевого слова `use`.
5. В PHP замыкания можно возвращать из других функций и передавать как аргументы в другие функции.

В JavaScript:

1. Замыкание в JavaScript создается при создании функции внутри другой функции.
2. Замыкания в JavaScript могут захватывать и использовать переменные из объемлющего контекста даже после завершения выполнения внешней функции.
3. В JavaScript замыкания используются для создания приватных переменных и функций,
Как вы используете систему событий в Laravel?

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

В этом примере мы создали событие UserRegistered и слушатель SendWelcomeEmail. Когда пользователь регистрируется, мы можем отправить событие UserRegistered, а слушатель SendWelcomeEmail обработает это событие, отправив новому пользователю приветственное письмо.
Что такое миграции?

Миграции (migrations) обозначают процесс изменения структуры базы данных. Этот процесс позволяет разработчикам эффективно управлять и обновлять схему базы данных в процессе развития приложения, минимизируя при этом потерю данных.

Основные концепции миграций в PHP включают:

1️⃣Создание миграции: Разработчик определяет, какие изменения нужно внести в базу данных, и записывает их в виде миграции. Это может быть создание новой таблицы, добавление/удаление столбца и т.д.

2️⃣Применение миграции: При необходимости разработчик применяет миграции к базе данных. Это приводит к выполнению всех определенных в миграциях SQL-запросов, изменяющих структуру базы данных.

3️⃣Откат миграции: В случае необходимости можно откатывать миграции, что означает отмену изменений, внесенных предыдущей миграцией. Это полезно, например, при отладке или при необходимости вернуть базу данных к предыдущему состоянию.

Примеры PHP-фреймворков и инструментов, предоставляющих возможности для работы с миграциями, включают Laravel (через механизм миграций Laravel), Symfony (Doctrine Migrations), Phinx и другие. В этих фреймворках миграции часто реализуются в виде кода на PHP, обеспечивая удобство в создании и управлении изменениями в базе данных.
💵⚡️ДАРИМ 40 000₽ ЗА ВИДЕО

Конкурс года в «Библиотеке программиста»: смонтируйте короткий вертикальный ролик формата Shorts/Reels* на тему программирования и разработки — лучший автор получит 40 тысяч рублей 🤑

Подробные условия:
➡️смонтируйте короткий смешной вертикальный ролик (можно и нужно использовать мемы)
➡️отправьте нам в бота @ProglibContest_bot
➡️лучшие ролики (по мнению редакции) мы будем выкладывать в канал и в наш инстаграм*
➡️тот, чей ролик соберет больше всего просмотров в инстаграм*, получит приз — 40 тысяч рублей

Какие ролики мы не принимаем:
😟не вашего авторства (проверим!)
😟длинные, невертикальные, несмешные

Таймлайн:
2 августа — заканчиваем принимать видео
⬇️
3 августа — начинаем загружать лучшие видео в инстаграм
⬇️
9 августа — подводим итоги

*Организация Meta признана экстремистской в РФ
Please open Telegram to view this post
VIEW IN TELEGRAM