Что подразумевается под понятием «триггер» в SQL?
Триггер в SQL — это предопределенный SQL-код, который автоматически выполняется (или «срабатывает») в ответ на определенные события в таблице или представлении базы данных. Триггеры могут быть использованы для автоматизации выполнения определенных действий при вставке, обновлении или удалении данных в таблице. Они предоставляют способ добавления бизнес-логики к базе данных.
Примеры событий, на которые могут реагировать триггеры:
AFTER INSERT (После вставки данных): Триггер срабатывает после вставки новой записи в таблицу.
AFTER UPDATE (После обновления данных): Триггер срабатывает после обновления существующей записи в таблице.
AFTER DELETE (После удаления данных): Триггер срабатывает после удаления записи из таблицы.
BEFORE INSERT (Перед вставкой данных): Триггер срабатывает перед вставкой новой записи в таблицу. Он может использоваться, чтобы модифицировать данные перед их вставкой.
BEFORE UPDATE (Перед обновлением данных): Триггер срабатывает перед обновлением существующей записи в таблице. Он может использоваться для проверки или модификации данных перед обновлением.
BEFORE DELETE (Перед удалением данных): Триггер срабатывает перед удалением записи из таблицы. Он может использоваться для проверки или сохранения данных перед удалением.
Триггер в 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 (например, для управления сессиями или кешем).
Отправка ответа клиенту:
Обработанный ответ отправляется веб-серверу, который передает его обратно клиенту (например, браузеру).
Завершение запроса:
Любые завершающие операции, такие как закрытие соединений с базой данных или очистка сессий, выполняются перед окончанием жизненного цикла запроса.
Жизненный цикл запроса в 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, который доступен на протяжении всей сессии и содержит данные, заданные разработчиком.
В 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 и определяет, какие события его интересуют и соответствующие методы для вызова.
Компонент 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.
Laravel позволяет определять переменные окружения для вашего приложения, которые можно использовать для хранения конфиденциальной информации или конфигурационных данных, которые должны быть разными в зависимости от окружения (например, разработка, staging, production)
В этом примере мы определили переменную окружения под названием APP_NAME в файле .env. Затем мы можем получить эту переменную в нашем коде с помощью функции env.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
Какая разница между замыканием в PHP и JavaScript?
Замыкание в PHP и JavaScript имеют некоторые сходства, но также имеют и некоторые различия.
В PHP:
1. Замыкание, так же как и функция, является объектом, который можно присвоить переменной.
2. В PHP замыкания создаются с использованием анонимных функций с помощью ключевого слова `function`.
3. Замыкания в PHP в основном используются для создания анонимных функций, которые могут захватывать и использовать переменные из объемлющего контекста.
4. Замыкания в PHP имеют доступ только к переменным, которые были явно переданы в них или объявлены в объемлющей функции с помощью ключевого слова `use`.
5. В PHP замыкания можно возвращать из других функций и передавать как аргументы в другие функции.
В JavaScript:
1. Замыкание в JavaScript создается при создании функции внутри другой функции.
2. Замыкания в JavaScript могут захватывать и использовать переменные из объемлющего контекста даже после завершения выполнения внешней функции.
3. В JavaScript замыкания используются для создания приватных переменных и функций,
Замыкание в PHP и JavaScript имеют некоторые сходства, но также имеют и некоторые различия.
В PHP:
1. Замыкание, так же как и функция, является объектом, который можно присвоить переменной.
2. В PHP замыкания создаются с использованием анонимных функций с помощью ключевого слова `function`.
3. Замыкания в PHP в основном используются для создания анонимных функций, которые могут захватывать и использовать переменные из объемлющего контекста.
4. Замыкания в PHP имеют доступ только к переменным, которые были явно переданы в них или объявлены в объемлющей функции с помощью ключевого слова `use`.
5. В PHP замыкания можно возвращать из других функций и передавать как аргументы в другие функции.
В JavaScript:
1. Замыкание в JavaScript создается при создании функции внутри другой функции.
2. Замыкания в JavaScript могут захватывать и использовать переменные из объемлющего контекста даже после завершения выполнения внешней функции.
3. В JavaScript замыкания используются для создания приватных переменных и функций,
Конкурс года в «Библиотеке программиста»: смонтируйте короткий вертикальный ролик формата Shorts/Reels* на тему программирования и разработки — лучший автор получит 40 тысяч рублей
Подробные условия:
Какие ролики мы не принимаем:
Таймлайн:
2 августа — заканчиваем принимать видео
⬇️
3 августа — начинаем загружать лучшие видео в инстаграм
⬇️
9 августа — подводим итоги
*Организация Meta признана экстремистской в РФ
Please open Telegram to view this post
VIEW IN TELEGRAM
✍️ «Библиотека программиста» находится в поиске автора на написание книжных рецензий
Кто нужен?
● Энтузиасты (джуны и выше), которые которые разбираются в IT
● Любители книг, которые хотели бы получать деньги за чтение и написание рецензий
● Работаем с самозанятыми (компенсируем налог), ИП
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
✉️ Станьте частью нашей команды — присылайте резюме и примеры работ hello@proglib.io
Кто нужен?
● Энтузиасты (джуны и выше), которые которые разбираются в IT
● Любители книг, которые хотели бы получать деньги за чтение и написание рецензий
● Работаем с самозанятыми (компенсируем налог), ИП
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
✉️ Станьте частью нашей команды — присылайте резюме и примеры работ hello@proglib.io
Forwarded from Proglib.academy | IT-курсы
В 2024 году IT-специалисты остаются на пике популярности. Но стоит ли вам становиться одним из них? Рассмотрим основные аргументы, чтобы понять, стоит ли вам становиться IT-специалистом в нашей статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как PHP может взаимодействовать с HTML?
PHP может взаимодействовать с HTML различными способами, так как это веб-язык программирования. Основные методы включают:
✅Внедрение PHP в HTML:
В PHP можно встраивать код прямо в HTML-документы, используя специальные теги
✅Формирование HTML из PHP:
PHP может генерировать HTML динамически, в зависимости от условий, данных из базы данных и других переменных.
✅Использование PHP в файлах-шаблонах:
PHP-файлы могут использоваться в качестве шаблонов, где HTML и PHP объединены для создания динамических страниц.
✅Использование PHP-фреймворков:
PHP-фреймворки, такие как Laravel или Symfony, предоставляют инструменты и шаблонизацию для более эффективной работы с HTML.
PHP может взаимодействовать с HTML различными способами, так как это веб-язык программирования. Основные методы включают:
✅Внедрение PHP в HTML:
В PHP можно встраивать код прямо в HTML-документы, используя специальные теги
✅Формирование HTML из PHP:
PHP может генерировать HTML динамически, в зависимости от условий, данных из базы данных и других переменных.
✅Использование PHP в файлах-шаблонах:
PHP-файлы могут использоваться в качестве шаблонов, где HTML и PHP объединены для создания динамических страниц.
✅Использование PHP-фреймворков:
PHP-фреймворки, такие как Laravel или Symfony, предоставляют инструменты и шаблонизацию для более эффективной работы с HTML.
Как хранить координаты точки на карте в БД?
Рассмотрим несколько возможных подходов:
1. Хранение отдельных полей с широтой и долготой:
- Создайте две числовые колонки в таблице БД, например, «latitude» и «longitude», представляющие широту и долготу соответственно.
- Для каждой точки, сохраните ее координаты в эти поля.
- При поиске точек на карте, вы можете использовать операторы сравнения или функции, поддерживаемые БД, для поиска точек в определенном радиусе или в пределах определенной географической области.
2. Использование географических типов данных:
- Некоторые реляционные БД, такие как MySQL с расширением Spatial, PostgreSQL с расширением PostGIS или SQLite с поддержкой расширения SpatiaLite, предоставляют специальные типы данных для работы с географическими объектами.
- Создайте колонку с типом данных для хранения географической информации, например, тип «Point», который позволяет хранить точку с заданными координатами.
- Сохраняйте информацию о точках на карте в этой колонке.
- Используйте функции и операторы, поддерживаемые соответствующим расширением БД, для выполнения географических запросов, таких как поиск точек в определенном радиусе или внутри границ определенного полигона.
Рассмотрим несколько возможных подходов:
1. Хранение отдельных полей с широтой и долготой:
- Создайте две числовые колонки в таблице БД, например, «latitude» и «longitude», представляющие широту и долготу соответственно.
- Для каждой точки, сохраните ее координаты в эти поля.
- При поиске точек на карте, вы можете использовать операторы сравнения или функции, поддерживаемые БД, для поиска точек в определенном радиусе или в пределах определенной географической области.
2. Использование географических типов данных:
- Некоторые реляционные БД, такие как MySQL с расширением Spatial, PostgreSQL с расширением PostGIS или SQLite с поддержкой расширения SpatiaLite, предоставляют специальные типы данных для работы с географическими объектами.
- Создайте колонку с типом данных для хранения географической информации, например, тип «Point», который позволяет хранить точку с заданными координатами.
- Сохраняйте информацию о точках на карте в этой колонке.
- Используйте функции и операторы, поддерживаемые соответствующим расширением БД, для выполнения географических запросов, таких как поиск точек в определенном радиусе или внутри границ определенного полигона.
В чем разница между использованием модели и построителя запросов в Laravel?
В Laravel модель — это объектно-ориентированное представление таблицы базы данных, а построитель запросов — это способ построения SQL-запросов с использованием свободного интерфейса.
Основное различие между использованием модели и построителя запросов заключается в том, что модель обеспечивает более высокий уровень абстракции над таблицей базы данных, позволяя вам взаимодействовать с данными более объектно-ориентированным способом. Например, модель может иметь методы, которые инкапсулируют сложные запросы, а также может обеспечивать взаимосвязи между различными таблицами.
Вот пример использования модели для получения всех пользователей из таблицы users:
В этом примере модель User представляет таблицу users, а метод all() извлекает все строки из таблицы.
Вы также можете использовать конструктор запросов с моделью для создания более сложных запросов. Например, чтобы получить всех активных пользователей, упорядоченных по имени, используя модель:
В этом примере методы where() и orderBy() являются частью интерфейса конструктора запросов, но вызываются они на экземпляре модели User.
В Laravel модель — это объектно-ориентированное представление таблицы базы данных, а построитель запросов — это способ построения SQL-запросов с использованием свободного интерфейса.
Основное различие между использованием модели и построителя запросов заключается в том, что модель обеспечивает более высокий уровень абстракции над таблицей базы данных, позволяя вам взаимодействовать с данными более объектно-ориентированным способом. Например, модель может иметь методы, которые инкапсулируют сложные запросы, а также может обеспечивать взаимосвязи между различными таблицами.
Вот пример использования модели для получения всех пользователей из таблицы users:
use App\Models\User;
$users = User::all();
В этом примере модель User представляет таблицу users, а метод all() извлекает все строки из таблицы.
Вы также можете использовать конструктор запросов с моделью для создания более сложных запросов. Например, чтобы получить всех активных пользователей, упорядоченных по имени, используя модель:
$users = User::where('status', 'active')
->orderBy('name', 'asc')
->get();
В этом примере методы where() и orderBy() являются частью интерфейса конструктора запросов, но вызываются они на экземпляре модели User.
Какие виды кеш-хранилищ знаете?
Существует несколько видов кеш-хранилищ:
1. Файловое кеш-хранилище (File-based cache): Использует файловую систему для хранения кеша. Данные кеша хранятся в файлах на диске и обычно используются, чтобы кешировать небольшие объемы данных, такие как отдельные HTML-страницы или фрагменты.
2. Memcached: Распределенная система кеширования, которая хранит данные в оперативной памяти (RAM). Он быстро доступен и эффективно обрабатывает большие объемы данных. Memcached может быть использован для кеширования запросов к базе данных, API-запросов и других операций для увеличения производительности.
3. Redis: Высокопроизводительная система управления базами данных, которая также может использоваться как кеш-хранилище. Redis поддерживает различные типы данных и предлагает расширенные функции, такие как публикация/подписка и сортированные множества. Это обычно используется для кеширования запросов к БД, хранения временных данных и ускорения работы приложений.
4. APCu: Расширение для PHP, которое предоставляет хранилище кеша в памяти на уровне оперативной памяти (RAM). Оно подходит для кеширования небольших объемов данных и часто используется для кеширования результатов вычислений, загружаемых файлов и других операций.
5. Zend OPCache: Расширение для PHP, которое выполняет опкод-кэширование для улучшения производительности. Оно кеширует скомпилированный байт-код PHP-файлов, чтобы избежать необходимости повторной компиляции каждый раз при выполнении скрипта. Про него мы недавно рассказывали
Отличие между ними заключается в различном способе хранения данных кеша, масштабируемости, скорости доступа и функциональности. Файловое кеш-хранилище хранит данные на диске, в то время как Memcached, Redis, APCu и Zend OPCache используют оперативную память для хранения данных. Memcached и Redis являются распределенными системами, позволяющими горизонтальное масштабирование, в то время как остальные кеш-хранилища ограничены доступом только к одному серверу. Каждый вид кеш-хранилища имеет свои сильные и слабые стороны, и выбор зависит от требований конкретного проекта и его бюджета.
Существует несколько видов кеш-хранилищ:
1. Файловое кеш-хранилище (File-based cache): Использует файловую систему для хранения кеша. Данные кеша хранятся в файлах на диске и обычно используются, чтобы кешировать небольшие объемы данных, такие как отдельные HTML-страницы или фрагменты.
2. Memcached: Распределенная система кеширования, которая хранит данные в оперативной памяти (RAM). Он быстро доступен и эффективно обрабатывает большие объемы данных. Memcached может быть использован для кеширования запросов к базе данных, API-запросов и других операций для увеличения производительности.
3. Redis: Высокопроизводительная система управления базами данных, которая также может использоваться как кеш-хранилище. Redis поддерживает различные типы данных и предлагает расширенные функции, такие как публикация/подписка и сортированные множества. Это обычно используется для кеширования запросов к БД, хранения временных данных и ускорения работы приложений.
4. APCu: Расширение для PHP, которое предоставляет хранилище кеша в памяти на уровне оперативной памяти (RAM). Оно подходит для кеширования небольших объемов данных и часто используется для кеширования результатов вычислений, загружаемых файлов и других операций.
5. Zend OPCache: Расширение для PHP, которое выполняет опкод-кэширование для улучшения производительности. Оно кеширует скомпилированный байт-код PHP-файлов, чтобы избежать необходимости повторной компиляции каждый раз при выполнении скрипта. Про него мы недавно рассказывали
Отличие между ними заключается в различном способе хранения данных кеша, масштабируемости, скорости доступа и функциональности. Файловое кеш-хранилище хранит данные на диске, в то время как Memcached, Redis, APCu и Zend OPCache используют оперативную память для хранения данных. Memcached и Redis являются распределенными системами, позволяющими горизонтальное масштабирование, в то время как остальные кеш-хранилища ограничены доступом только к одному серверу. Каждый вид кеш-хранилища имеет свои сильные и слабые стороны, и выбор зависит от требований конкретного проекта и его бюджета.
Что такое денормализация? Для чего она нужна?
Денормализация — это процесс организации реляционной базы данных, при котором избегается нормализация для повышения эффективности чтения данных.
Денормализация нужна для оптимизации производительности базы данных в ситуациях, когда нужно быстро и эффективно получать данные, особенно в случаях, когда запросы на чтение данных являются частыми и требуют многих операций соединения таблиц.
Денормализация может применяться, когда нужно улучшить производительность при получении данных из базы данных за счет уменьшения количества соединений таблиц, упрощения запросов и сокращения времени выполнения запросов. Однако, важно помнить, что денормализация может привести к повышению избыточности данных и усложнению поддержки базы данных.
Денормализация — это процесс организации реляционной базы данных, при котором избегается нормализация для повышения эффективности чтения данных.
Денормализация нужна для оптимизации производительности базы данных в ситуациях, когда нужно быстро и эффективно получать данные, особенно в случаях, когда запросы на чтение данных являются частыми и требуют многих операций соединения таблиц.
Денормализация может применяться, когда нужно улучшить производительность при получении данных из базы данных за счет уменьшения количества соединений таблиц, упрощения запросов и сокращения времени выполнения запросов. Однако, важно помнить, что денормализация может привести к повышению избыточности данных и усложнению поддержки базы данных.