✍️Библиотека программиста» находится в поиске автора оригинальных статей
Кто нужен?
● Энтузиасты (джуны и выше), которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать
Тематика
● DevOps
● В четырех случаях из пяти вы предлагаете тему статьи
Объем
● От 7 до 15 тыс. знаков без учета кода
● 2-3 статьи в месяц
Оплата
● 8к руб. за статью
● Работаем с самозанятыми (компенсируем налог), ИП
Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.
✉️Пишите на [email protected]
Кто нужен?
● Энтузиасты (джуны и выше), которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать
Тематика
● DevOps
● В четырех случаях из пяти вы предлагаете тему статьи
Объем
● От 7 до 15 тыс. знаков без учета кода
● 2-3 статьи в месяц
Оплата
● 8к руб. за статью
● Работаем с самозанятыми (компенсируем налог), ИП
Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.
✉️Пишите на [email protected]
Мы наконец-то запустили канал по разработке игр — теперь все самое важное и полезное из мира геймдева можно узнать в одном месте.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подписывайтесь на наш новый канал про нейросети для создания изображений, там есть:
Please open Telegram to view this post
VIEW IN TELEGRAM
Proglib запускает канал Азбука айтишника
Подписывайтесь на наш новый канал про айти для неайтишников — для совсем новичков и тех, кто постоянно взаимодействует с айтишниками.
У нас есть рубрики:
⭐ База — в ней рассказываем про термины из IT простым языком
⭐ Проект — объясняем, из чего состоят айтишные проекты и сколько они могут стоить
⭐ Психология айтишника — тут говорим про софт-скиллы, особенности работы и взаимодействия
👉Подписывайтесь!
Подписывайтесь на наш новый канал про айти для неайтишников — для совсем новичков и тех, кто постоянно взаимодействует с айтишниками.
У нас есть рубрики:
👉Подписывайтесь!
Please open Telegram to view this post
VIEW IN TELEGRAM
Как использовать репозиторий в контроллере в Symfony, написав код?
Чтобы использовать репозиторий в контроллере Symfony, выполните следующие шаги:
Определите репозиторий: Убедитесь, что у вас есть класс репозитория, определённый для вашей сущности. Symfony обычно автоматически генерирует эти классы при создании сущности.
Инжектируйте репозиторий в контроллер: Используйте внедрение зависимостей, чтобы инжектировать репозиторий в ваш контроллер. Это можно сделать через конструктор или напрямую в методе контроллера.
Чтобы использовать репозиторий в контроллере Symfony, выполните следующие шаги:
Определите репозиторий: Убедитесь, что у вас есть класс репозитория, определённый для вашей сущности. Symfony обычно автоматически генерирует эти классы при создании сущности.
Инжектируйте репозиторий в контроллер: Используйте внедрение зависимостей, чтобы инжектировать репозиторий в ваш контроллер. Это можно сделать через конструктор или напрямую в методе контроллера.
Как вы используете макросы response для упрощения ответов API в Laravel?
Laravel предоставляет функцию, называемую макросами ответов, которая позволяет определять пользовательские форматы ответов, которые могут быть повторно использованы в вашем приложении. Макросы ответов могут упростить процесс создания ответов API, инкапсулируя общие форматы ответов в многократно используемый метод.
В этом примере мы определяем пользовательский формат ответа с помощью метода макроса на фасаде Response. Пользовательский формат ответа возвращает ответ в формате JSON с ключом состояния и необязательным ключом данных.
Затем мы используем пользовательский формат ответа в UserController, вызывая response()->api() и передавая данные, которые мы хотим вернуть.
Используя макросы ответов, мы можем упростить процесс создания ответов API и избежать дублирования кода в нашем приложении.
Laravel предоставляет функцию, называемую макросами ответов, которая позволяет определять пользовательские форматы ответов, которые могут быть повторно использованы в вашем приложении. Макросы ответов могут упростить процесс создания ответов API, инкапсулируя общие форматы ответов в многократно используемый метод.
В этом примере мы определяем пользовательский формат ответа с помощью метода макроса на фасаде Response. Пользовательский формат ответа возвращает ответ в формате JSON с ключом состояния и необязательным ключом данных.
Затем мы используем пользовательский формат ответа в UserController, вызывая response()->api() и передавая данные, которые мы хотим вернуть.
Используя макросы ответов, мы можем упростить процесс создания ответов API и избежать дублирования кода в нашем приложении.
Что нового в РНР 8?
1. Just-in-Time компиляция (JIT): В PHP 8 была добавлена возможность JIT компиляции, что может улучшить производительность вашего приложения. JIT-компиляция позволяет выполнять оптимизацию кода на лету.
2. Улучшенная типизация: В PHP 8 была добавлена более строгая типизация, включая поддержку статического анализа типов. Теперь вы можете определить ожидаемые типы аргументов функций и возвращаемые значения.
3. Атрибуты: PHP 8 вводит новую концепцию атрибутов, позволяющих применять метаданные к классам, методам и свойствам. Атрибуты потенциально полезны для разработчиков фреймворков и библиотек, чтобы добавить дополнительную информацию о коде.
4. Отлов исключений: PHP 8 добавляет возможность отлавливать несколько исключений в одном операторе catch. Теперь вы можете указать несколько типов исключений через вертикальную черту, например: catch (Exception1 | Exception2 $e).
5. Nullsafe оператор: В PHP 8 был добавлен новый оператор «?->», который облегчает работу с объектами, которые могут быть null. Этот оператор позволяет безопасно и удобно обращаться к свойствам и методам объектов, проверяя наличие значения null.
6. Много других улучшений: PHP 8 содержит еще множество других улучшений, таких как улучшения в ядре, новые функции, оптимизации и исправления ошибок. Все нововведения можно увидеть тут
1. Just-in-Time компиляция (JIT): В PHP 8 была добавлена возможность JIT компиляции, что может улучшить производительность вашего приложения. JIT-компиляция позволяет выполнять оптимизацию кода на лету.
2. Улучшенная типизация: В PHP 8 была добавлена более строгая типизация, включая поддержку статического анализа типов. Теперь вы можете определить ожидаемые типы аргументов функций и возвращаемые значения.
3. Атрибуты: PHP 8 вводит новую концепцию атрибутов, позволяющих применять метаданные к классам, методам и свойствам. Атрибуты потенциально полезны для разработчиков фреймворков и библиотек, чтобы добавить дополнительную информацию о коде.
4. Отлов исключений: PHP 8 добавляет возможность отлавливать несколько исключений в одном операторе catch. Теперь вы можете указать несколько типов исключений через вертикальную черту, например: catch (Exception1 | Exception2 $e).
5. Nullsafe оператор: В PHP 8 был добавлен новый оператор «?->», который облегчает работу с объектами, которые могут быть null. Этот оператор позволяет безопасно и удобно обращаться к свойствам и методам объектов, проверяя наличие значения null.
6. Много других улучшений: PHP 8 содержит еще множество других улучшений, таких как улучшения в ядре, новые функции, оптимизации и исправления ошибок. Все нововведения можно увидеть тут
Что подразумевается под понятием «триггер» в 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.
Как устроен Singleton и почему его считают антипатерном?
Синглтон (Singleton) — это порождающий паттерн проектирования, который обеспечивает, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Теперь рассмотрим, почему Синглтон часто считают антипаттерном:
1️⃣Глобальное состояние: Использование глобального объекта (в данном случае, единственного экземпляра класса) может привести к созданию глобального состояния, что затрудняет тестирование и усложняет понимание потока управления программы.
2️⃣Сложность в тестировании: Синглтоны могут вызывать проблемы при тестировании, так как они создают глобальные зависимости, которые не всегда легко подменить для модульного тестирования.
3️⃣Проблемы с наследованием: Наследование от Синглтона может стать проблемой, так как он имеет статическую точку доступа, которая не всегда вписывается в иерархию наследования.
4️⃣Сложность в масштабировании: Использование Синглтона может затруднить масштабирование системы, так как он создает глобальную точку зависимости, которая может стать узким местом.
5️⃣Проблемы с потокобезопасностью: Реализации Синглтона, как правило, не потокобезопасны по умолчанию, что может привести к проблемам в многопоточных приложениях.
Синглтон (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 запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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, как следует из названия, на веб-странице означает, что веб-сервер отклонил ваш запрос на просмотр, либо потому, что веб-сервер работает неправильно, либо потому, что у вас нет правильных учетных данных.
Когда неавторизованный пользователь пытается получить доступ к веб-приложению, Symfony отказывает ему в доступе. Он отображает страницу ошибки и возвращает HTTP-статус 403. Ошибка Access Denied, как следует из названия, на веб-странице означает, что веб-сервер отклонил ваш запрос на просмотр, либо потому, что веб-сервер работает неправильно, либо потому, что у вас нет правильных учетных данных.
Какие типы связей в базе данных?
Существует три типа связей между таблицами в базе данных:
«Один-к-одному» или 1:1. Это означает, что каждой записи в первой таблице соответствует не более одной записи во второй таблице, и наоборот.
«Один-ко-многим» или 1:M. Это означает, что одному экземпляру сущности может соответствовать любое количество (M) экземпляров другой сущности.
«Многие-ко-многим» или M:N. Это означает, что нескольким экземплярам одной сущности может соответствовать несколько экземпляров другой сущности.
Существует три типа связей между таблицами в базе данных:
«Один-к-одному» или 1:1. Это означает, что каждой записи в первой таблице соответствует не более одной записи во второй таблице, и наоборот.
«Один-ко-многим» или 1:M. Это означает, что одному экземпляру сущности может соответствовать любое количество (M) экземпляров другой сущности.
«Многие-ко-многим» или M:N. Это означает, что нескольким экземплярам одной сущности может соответствовать несколько экземпляров другой сущности.
Как использовать каталог хранилищ в Laravel?
Laravel предоставляет каталог хранения, который можно использовать для хранения файлов и других данных, которые не должны быть общедоступными.
В этом примере мы сохраняем файл в каталоге uploads внутри каталога storage с помощью метода store. Затем мы можем получить файл с помощью метода get и удалить его с помощью метода delete.
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 важно понимать, чтобы написанный код был максимально эффективным и не вызывал утечек памяти.
В 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) (потребляет память, пропорционально квадрату размера входных данных).
Сложность алгоритма представляет собой меру его эффективности и определяет количество ресурсов, таких как время и память, необходимых для его выполнения.
Существуют два основных типа сложности алгоритма: временная сложность и пространственная сложность.
Временная сложность алгоритма оценивает время, необходимое для его выполнения, в зависимости от размера входных данных. Обычно время выполнения алгоритма измеряется в тактах процессора или в секундах. Примеры временной сложности включают константную сложность O(1) (выполнение за постоянное время), линейную сложность O(n) (выполнение занимает время, пропорциональное размеру входных данных) и квадратичную сложность O(n^2) (выполнение занимает время, пропорциональное квадрату размера входных данных).
Пространственная сложность алгоритма оценивает объем памяти, необходимый для его выполнения, в зависимости от размера входных данных. Обычно пространственная сложность измеряется в байтах. Примеры пространственной сложности включают константную сложность O(1) (не зависит от размера входных данных), линейную сложность O(n) (потребляет память, пропорционально размеру входных данных) и квадратичную сложность O(n^2) (потребляет память, пропорционально квадрату размера входных данных).
Что такое идемпотентность?
Идемпотентность — это свойство операции, которое означает, что повторное ее выполнение не приводит к изменению состояния системы после первого выполнения. В контексте веб-разработки и использования HTTP методов, идемпотентность означает, что повторный запрос с одним и тем же набором параметров не изменит состояние сервера.
Это важное понятие для разработчиков, потому что идемпотентные операции обеспечивают безопасность и надежность системы, позволяя повторять запросы в случае, если они не достигли сервера или были обработаны, но клиент не получил ответа.
Вот несколько примеров идемпотентных операций:
1. Чтение данных: Операция получения данных из базы данных с помощью SELECT является идемпотентной, потому что повторное выполнение запроса не изменит состояние базы данных.
2. Удаление записи: Операция DELETE является идемпотентной, поскольку повторное выполнение запроса на удаление записи не приведет к ошибке и не изменит состояние базы данных, так как запись уже удалена.
3. Обновление записи: Если обновление записи происходит на основе идентификатора записи и одинаковые значения обновляются несколько раз, то запрос UPDATE будет идемпотентным.
Идемпотентность — это свойство операции, которое означает, что повторное ее выполнение не приводит к изменению состояния системы после первого выполнения. В контексте веб-разработки и использования HTTP методов, идемпотентность означает, что повторный запрос с одним и тем же набором параметров не изменит состояние сервера.
Это важное понятие для разработчиков, потому что идемпотентные операции обеспечивают безопасность и надежность системы, позволяя повторять запросы в случае, если они не достигли сервера или были обработаны, но клиент не получил ответа.
Вот несколько примеров идемпотентных операций:
1. Чтение данных: Операция получения данных из базы данных с помощью SELECT является идемпотентной, потому что повторное выполнение запроса не изменит состояние базы данных.
2. Удаление записи: Операция DELETE является идемпотентной, поскольку повторное выполнение запроса на удаление записи не приведет к ошибке и не изменит состояние базы данных, так как запись уже удалена.
3. Обновление записи: Если обновление записи происходит на основе идентификатора записи и одинаковые значения обновляются несколько раз, то запрос UPDATE будет идемпотентным.