Что делает оператор yield?
Когда оператор yield вызывается внутри функции, она превращает эту функцию в генератор. Он возвращает следующее значение из генератора и приостанавливает его выполнение, сохраняя его текущее состояние. При следующем вызове оператора yield выполнение продолжится с того же места, где остановилось.
Оператор yield может использоваться для итерации через массивы, коллекции или базы данных без необходимости загружать все значения сразу. Он также может использоваться вместе с оператором foreach для упрощения обработки больших объемов данных.
Когда оператор yield вызывается внутри функции, она превращает эту функцию в генератор. Он возвращает следующее значение из генератора и приостанавливает его выполнение, сохраняя его текущее состояние. При следующем вызове оператора yield выполнение продолжится с того же места, где остановилось.
Оператор yield может использоваться для итерации через массивы, коллекции или базы данных без необходимости загружать все значения сразу. Он также может использоваться вместе с оператором foreach для упрощения обработки больших объемов данных.
Опишите поведение при использовании traits с одинаковыми именами полей и / или методов?
При использовании traits с одинаковыми именами полей и/или методов, возникает конфликт имен, который не позволяет PHP однозначно определить, какое поле или метод должны использоваться.
Если в классе используется несколько traits, и в этих traits есть поля или методы с одинаковыми именами, возникает ошибка компиляции "trait method has not been applied", или "trait field has not been applied". По сути, PHP не знает, из какого trait следует взять поле или метод.
Для разрешения этого конфликта имен трейт может быть использован с использованием псевдонима. Например, можно использовать ключевое слово
Также в PHP 7.2 и выше была добавлена возможность адаптировать методы или конфликтующие поля с помощью оператора
С помощью таких алиасов можно явным образом указать, какой метод или поле следует использовать из каждого трейта.
При использовании traits с одинаковыми именами полей и/или методов, возникает конфликт имен, который не позволяет PHP однозначно определить, какое поле или метод должны использоваться.
Если в классе используется несколько traits, и в этих traits есть поля или методы с одинаковыми именами, возникает ошибка компиляции "trait method has not been applied", или "trait field has not been applied". По сути, PHP не знает, из какого trait следует взять поле или метод.
Для разрешения этого конфликта имен трейт может быть использован с использованием псевдонима. Например, можно использовать ключевое слово
insteadof
, чтобы указать, какой метод или поле должно использоватьсяТакже в PHP 7.2 и выше была добавлена возможность адаптировать методы или конфликтующие поля с помощью оператора
as
. С помощью таких алиасов можно явным образом указать, какой метод или поле следует использовать из каждого трейта.
Будут доступны частные методы trait в классе?
Нет, частные методы trait не будут доступны в классе, который использует этот trait. Частные методы в PHP ограничены видимостью только внутри класса, в котором они были определены.
Trait не изменяет видимость своих методов. Поэтому, если trait содержит частный метод, он остается видимым только внутри этого trait. Класс, использующий trait, не будет иметь доступ к этому частному методу.
Тем не менее, trait может использовать публичные и защищенные методы, и эти методы будут доступны в классе, который использует trait.
Нет, частные методы trait не будут доступны в классе, который использует этот trait. Частные методы в PHP ограничены видимостью только внутри класса, в котором они были определены.
Trait не изменяет видимость своих методов. Поэтому, если trait содержит частный метод, он остается видимым только внутри этого trait. Класс, использующий trait, не будет иметь доступ к этому частному методу.
Тем не менее, trait может использовать публичные и защищенные методы, и эти методы будут доступны в классе, который использует trait.
Что такое ACID?
ACID — это аббревиатура, обозначающая четыре основных характеристики транзакций в базах данных: атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation) и долговечность (Durability).
1. Атомарность обеспечивает полную или ничего не делающую выполнение транзакции. Транзакция считается атомарной, если она выполняется как единое целое, и либо все ее операции будут успешно выполнены, либо ни одна.
2. Согласованность гарантирует, что после успешного завершения транзакции база данных находится в согласованном состоянии. Это означает, что интегритет данных должен быть сохранен, а все ограничения и правила, определенные на уровне базы данных, должны быть соблюдены.
3. Изолированность обеспечивает, что каждая транзакция выполняется в изолированной среде, рассматривающей ее как единственную выполняющуюся транзакцию. Это гарантирует, что результаты одной транзакции не будут видны другим транзакциям, пока они не будут успешно завершены.
4. Долговечность означает, что после успешного завершения транзакции, ее изменения должны оставаться постоянными и не должны быть потеряны из-за сбоев в системе или других внешних факторов.
ACID-свойства являются важными для обеспечения надежности и целостности данных в системе, особенно в контексте критически важных приложений, где требуется консистентность данных.
ACID — это аббревиатура, обозначающая четыре основных характеристики транзакций в базах данных: атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation) и долговечность (Durability).
1. Атомарность обеспечивает полную или ничего не делающую выполнение транзакции. Транзакция считается атомарной, если она выполняется как единое целое, и либо все ее операции будут успешно выполнены, либо ни одна.
2. Согласованность гарантирует, что после успешного завершения транзакции база данных находится в согласованном состоянии. Это означает, что интегритет данных должен быть сохранен, а все ограничения и правила, определенные на уровне базы данных, должны быть соблюдены.
3. Изолированность обеспечивает, что каждая транзакция выполняется в изолированной среде, рассматривающей ее как единственную выполняющуюся транзакцию. Это гарантирует, что результаты одной транзакции не будут видны другим транзакциям, пока они не будут успешно завершены.
4. Долговечность означает, что после успешного завершения транзакции, ее изменения должны оставаться постоянными и не должны быть потеряны из-за сбоев в системе или других внешних факторов.
ACID-свойства являются важными для обеспечения надежности и целостности данных в системе, особенно в контексте критически важных приложений, где требуется консистентность данных.
Forwarded from Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие способы коммуникации между микросервисами?
Есть два основных типа коммуникаций в микросервисной архитектуре:
Механизмы обеспечения безопасности (OAuth2.0, SSO, AD или другие типы), если ваши сервисы требуют авторизованного доступа
Сообщения между сервисами, обмен данными между бизнес-процессами. Назовем их коммуникации обеспечения бизнес-процессов (КОБП). Они подразделяются на:
Высокоуровневые (клиентские). Сообщения между пользователем и сервисами (client-to-service), например, с использованием Authorization Code Flow (OAuth2.0).
Низкоуровневые (системы). Сообщения между сервисами и сервисами (service-to-service), например, Client Credentials Flow (OAuth2.0)
OAuth2.0 — это промышленный стандарт (industry-standard protocol for authorization) состоящий из 36 правил обмена сообщениями между сервером авторизации и другими клиентами (пользователями, сервисами, устройствами и так далее). Ключевой момент в том, что работают эти правила, согласно спецификациям, по протоколу HTTP(S).
Есть два основных типа коммуникаций в микросервисной архитектуре:
Механизмы обеспечения безопасности (OAuth2.0, SSO, AD или другие типы), если ваши сервисы требуют авторизованного доступа
Сообщения между сервисами, обмен данными между бизнес-процессами. Назовем их коммуникации обеспечения бизнес-процессов (КОБП). Они подразделяются на:
Высокоуровневые (клиентские). Сообщения между пользователем и сервисами (client-to-service), например, с использованием Authorization Code Flow (OAuth2.0).
Низкоуровневые (системы). Сообщения между сервисами и сервисами (service-to-service), например, Client Credentials Flow (OAuth2.0)
OAuth2.0 — это промышленный стандарт (industry-standard protocol for authorization) состоящий из 36 правил обмена сообщениями между сервером авторизации и другими клиентами (пользователями, сервисами, устройствами и так далее). Ключевой момент в том, что работают эти правила, согласно спецификациям, по протоколу HTTP(S).
Здесь класс Connection находится в пространстве имен MyProject\Database, а функция calculate - в пространстве имен MyProject\Utils. Это позволяет избежать конфликтов, если в проекте есть, например, еще один класс с именем Connection или функция с именем calculate.
На собеседовании рекомендуется демонстрировать понимание того, как пространства имен повышают читаемость, уменьшают вероятность ошибок и обеспечивают структурирование кода в больших проектах. Также полезно знание стандартов автозагрузки (например, PSR-4) и их применение в проектах.
На собеседовании рекомендуется демонстрировать понимание того, как пространства имен повышают читаемость, уменьшают вероятность ошибок и обеспечивают структурирование кода в больших проектах. Также полезно знание стандартов автозагрузки (например, PSR-4) и их применение в проектах.
Как устроен Singleton и почему его считают антипатерном?
Синглтон (Singleton) — это порождающий паттерн проектирования, который обеспечивает, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Теперь рассмотрим, почему Синглтон часто считают антипаттерном:
1️⃣Глобальное состояние: Использование глобального объекта (в данном случае, единственного экземпляра класса) может привести к созданию глобального состояния, что затрудняет тестирование и усложняет понимание потока управления программы.
2️⃣Сложность в тестировании: Синглтоны могут вызывать проблемы при тестировании, так как они создают глобальные зависимости, которые не всегда легко подменить для модульного тестирования.
3️⃣Проблемы с наследованием: Наследование от Синглтона может стать проблемой, так как он имеет статическую точку доступа, которая не всегда вписывается в иерархию наследования.
4️⃣Сложность в масштабировании: Использование Синглтона может затруднить масштабирование системы, так как он создает глобальную точку зависимости, которая может стать узким местом.
5️⃣Проблемы с потокобезопасностью: Реализации Синглтона, как правило, не потокобезопасны по умолчанию, что может привести к проблемам в многопоточных приложениях.
Синглтон (Singleton) — это порождающий паттерн проектирования, который обеспечивает, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Теперь рассмотрим, почему Синглтон часто считают антипаттерном:
1️⃣Глобальное состояние: Использование глобального объекта (в данном случае, единственного экземпляра класса) может привести к созданию глобального состояния, что затрудняет тестирование и усложняет понимание потока управления программы.
2️⃣Сложность в тестировании: Синглтоны могут вызывать проблемы при тестировании, так как они создают глобальные зависимости, которые не всегда легко подменить для модульного тестирования.
3️⃣Проблемы с наследованием: Наследование от Синглтона может стать проблемой, так как он имеет статическую точку доступа, которая не всегда вписывается в иерархию наследования.
4️⃣Сложность в масштабировании: Использование Синглтона может затруднить масштабирование системы, так как он создает глобальную точку зависимости, которая может стать узким местом.
5️⃣Проблемы с потокобезопасностью: Реализации Синглтона, как правило, не потокобезопасны по умолчанию, что может привести к проблемам в многопоточных приложениях.
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
🧠Чему вы бы хотели научиться?
Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?
За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.
👉Опрос по ссылке👈
Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?
За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.
👉Опрос по ссылке👈
Что означает «переключение на PHP» (escaping to PHP)?
Переключение на PHP означает переход от контекста HTML или другого языка разметки к коду PHP внутри веб-документа. В веб-разработке PHP часто используется для серверного скриптинга, а HTML — для определения структуры и содержания веб-страниц.
Когда разработчики работают над веб-страницей, содержащей как HTML, так и код PHP, иногда им нужно встроить фрагменты кода PHP в разметку HTML для генерации динамического контента или выполнения задач на стороне сервера. Для этого они «переключаются» из контекста HTML в PHP, используя соответствующие разделители PHP.
Переключение на PHP означает переход от контекста HTML или другого языка разметки к коду PHP внутри веб-документа. В веб-разработке PHP часто используется для серверного скриптинга, а HTML — для определения структуры и содержания веб-страниц.
Когда разработчики работают над веб-страницей, содержащей как HTML, так и код PHP, иногда им нужно встроить фрагменты кода PHP в разметку HTML для генерации динамического контента или выполнения задач на стороне сервера. Для этого они «переключаются» из контекста HTML в PHP, используя соответствующие разделители PHP.
Что делают операторы «break» и «continue»?
Оператор «break»:
Встретившись внутри цикла, «break» немедленно завершает выполнение цикла и передает управление оператору, находящемуся непосредственно после цикла.
Обычно используется для преждевременного выхода из цикла при выполнении определенного условия.
Оператор «continue»:
Встретившись внутри цикла, «continue» пропускает оставшийся код в текущей итерации цикла и переходит к следующей итерации.
Полезен, когда необходимо пропустить определенные итерации на основе условия, но продолжить выполнение цикла.
Оператор «break»:
Встретившись внутри цикла, «break» немедленно завершает выполнение цикла и передает управление оператору, находящемуся непосредственно после цикла.
Обычно используется для преждевременного выхода из цикла при выполнении определенного условия.
Оператор «continue»:
Встретившись внутри цикла, «continue» пропускает оставшийся код в текущей итерации цикла и переходит к следующей итерации.
Полезен, когда необходимо пропустить определенные итерации на основе условия, но продолжить выполнение цикла.
Что позволяет вам сделать оператор «goto»?
В PHP оператор goto работает аналогично тому, как он работает в других языках программирования. Он позволяет вам перейти к другому участку вашего PHP-кода на основе определенной метки.
В примере программа перейдет к метке a и выполнит код, пропуская строку с выводом «Этот код не будет выполнен».
В PHP оператор goto работает аналогично тому, как он работает в других языках программирования. Он позволяет вам перейти к другому участку вашего PHP-кода на основе определенной метки.
В примере программа перейдет к метке a и выполнит код, пропуская строку с выводом «Этот код не будет выполнен».
Какие есть связи и как они реализуются в Laravel?
В Laravel связи между моделями позволяют вам определять отношения между различными таблицами вашей базы данных. Это позволяет вам легко извлекать и работать с данными, связанными друг с другом. В Laravel поддерживаются различные типы связей, такие как один к одному, один ко многим, многие к одному, многие ко многим.
Вот некоторые типы связей в Laravel и как они реализуются:
Один к одному (One-to-One):
Это отношение, когда каждая запись в одной таблице связана с одной записью в другой таблице.
Реализуется с помощью метода hasOne() или belongsTo() в моделях.
Один ко многим (One-to-Many):
Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице.
В Laravel это реализуется с помощью метода hasMany() и обратного метода belongsTo().
Многие к одному (Many-to-One):
Множество записей в одной таблице связано с одной записью в другой таблице.
Это аналогично обратному отношению в One-to-Many, и реализуется с помощью метода belongsTo() в дочерней модели.
Многие ко многим (Many-to-Many):
Множество записей в одной таблице связано с множеством записей в другой таблице.
Реализуется с помощью методов belongsToMany() в обеих моделях.
Вы можете использовать эти связи для извлечения данных, создания новых записей и обновления существующих данных в вашей базе данных с помощью элегантных и чистых запросов, используя Eloquent ORM в Laravel.
В Laravel связи между моделями позволяют вам определять отношения между различными таблицами вашей базы данных. Это позволяет вам легко извлекать и работать с данными, связанными друг с другом. В Laravel поддерживаются различные типы связей, такие как один к одному, один ко многим, многие к одному, многие ко многим.
Вот некоторые типы связей в Laravel и как они реализуются:
Один к одному (One-to-One):
Это отношение, когда каждая запись в одной таблице связана с одной записью в другой таблице.
Реализуется с помощью метода hasOne() или belongsTo() в моделях.
Один ко многим (One-to-Many):
Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице.
В Laravel это реализуется с помощью метода hasMany() и обратного метода belongsTo().
Многие к одному (Many-to-One):
Множество записей в одной таблице связано с одной записью в другой таблице.
Это аналогично обратному отношению в One-to-Many, и реализуется с помощью метода belongsTo() в дочерней модели.
Многие ко многим (Many-to-Many):
Множество записей в одной таблице связано с множеством записей в другой таблице.
Реализуется с помощью методов belongsToMany() в обеих моделях.
Вы можете использовать эти связи для извлечения данных, создания новых записей и обновления существующих данных в вашей базе данных с помощью элегантных и чистых запросов, используя Eloquent ORM в Laravel.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣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-разработчиков
👾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 — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣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-разработчиков
👾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 — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ