😱 Завтра цена на курс «AI-агенты для DS» вырастет
Пока вы думаете — другие уже покупают. Что вы теряете, откладывая решение? Как минимум — 10 000 рублей, именно столько вы переплатите завтра. Как максимум — шанс войти в топ-1% дата-сайентистов, которые умеют строить AI-агенты.
🎓 Чему вы научитесь на курсе:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Решение за вами.
👉 Купить курс по старой цене
Пока вы думаете — другие уже покупают. Что вы теряете, откладывая решение? Как минимум — 10 000 рублей, именно столько вы переплатите завтра. Как максимум — шанс войти в топ-1% дата-сайентистов, которые умеют строить AI-агенты.
🎓 Чему вы научитесь на курсе:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Решение за вами.
👉 Купить курс по старой цене
proglib.academy
Курс|AI-агенты для DS-специалистов
На курсе ты разберёшься, как работают AI-агенты и как их применять в работе — от текстовых помощников до систем, помогающих принимать решения. Разберем архитектуру агентов, связку с внешними API, пайплайны действий и популярные библиотеки. Курс включает реальные…
Что такое нормализация?
Нормализация является процессом организации структуры данных в базе данных для достижения оптимального хранения и обработки информации. Целью нормализации является устранение избыточности и аномалий данных, а также обеспечение целостности и эффективности работы с данными.
В процессе нормализации данные разделяются на отдельные таблицы и связываются при помощи отношений. Нормализация определяет правила, которым должны следовать отношения между таблицами, чтобы минимизировать избыточность и обеспечить логическую структуру данных.
Выделяют различные уровни нормализации (нормальные формы), такие как:
1. Первая нормальная форма (1NF): Требует, чтобы каждая колонка в таблице содержала только атомарные (неделимые) значения, а каждая строка была уникальной.
2. Вторая нормальная форма (2NF): Находит и устраняет избыточные зависимости между колонками в таблице, разделяя данные на связанные таблицы.
3. Третья нормальная форма (3NF): Устраняет транзитивные зависимости между колонками, вынося их в отдельные таблицы.
Существуют также более высокие уровни нормализации, такие как четвертая нормальная форма (4NF), пятая нормальная форма (5NF) и другие. Эти нормальные формы помогают сделать базу данных более гибкой, масштабируемой, эффективной и согласованной.
Нормализация является важным шагом в проектировании базы данных, однако следует помнить, что чрезмерная нормализация может привести к сложности и медленным запросам. Поэтому в некоторых случаях может быть необходимым достигнуть компромисса между нормализацией и денормализацией данных для повышения производительности и удобства использования базы данных.
Нормализация является процессом организации структуры данных в базе данных для достижения оптимального хранения и обработки информации. Целью нормализации является устранение избыточности и аномалий данных, а также обеспечение целостности и эффективности работы с данными.
В процессе нормализации данные разделяются на отдельные таблицы и связываются при помощи отношений. Нормализация определяет правила, которым должны следовать отношения между таблицами, чтобы минимизировать избыточность и обеспечить логическую структуру данных.
Выделяют различные уровни нормализации (нормальные формы), такие как:
1. Первая нормальная форма (1NF): Требует, чтобы каждая колонка в таблице содержала только атомарные (неделимые) значения, а каждая строка была уникальной.
2. Вторая нормальная форма (2NF): Находит и устраняет избыточные зависимости между колонками в таблице, разделяя данные на связанные таблицы.
3. Третья нормальная форма (3NF): Устраняет транзитивные зависимости между колонками, вынося их в отдельные таблицы.
Существуют также более высокие уровни нормализации, такие как четвертая нормальная форма (4NF), пятая нормальная форма (5NF) и другие. Эти нормальные формы помогают сделать базу данных более гибкой, масштабируемой, эффективной и согласованной.
Нормализация является важным шагом в проектировании базы данных, однако следует помнить, что чрезмерная нормализация может привести к сложности и медленным запросам. Поэтому в некоторых случаях может быть необходимым достигнуть компромисса между нормализацией и денормализацией данных для повышения производительности и удобства использования базы данных.
Что такое opcache? Как он работает?
OPcache (Optimized Cache) — это расширение для PHP, которое осуществляет кэширование скомпилированного байт-кода PHP для улучшения производительности выполнения скриптов.
OPcache работает в нескольких этапах:
Кэширование байт-кода: После компиляции скомпилированный байт-код кэшируется в памяти OPcache. Кэширование позволяет избежать необходимости компиляции скрипта при каждом его выполнении, что сокращает время обработки запросов.
Повторное использование кэша: При последующих запросах к этому скрипту, PHP загружает его скомпилированный байт-код из кэша OPcache, обеспечивая быстрое выполнение без необходимости повторной компиляции.
OPcache также предоставляет дополнительные возможности для оптимизации производительности:
- Предзагрузка определяемых классов: OPcache может предзагрузить классы, определенные в скриптах, для ускорения их доступа и использования.
- Контроль за памятью: OPcache имеет механизм управления памятью, который позволяет наблюдать за использованием памяти скриптами и в случае необходимости автоматически очищать кэш.
- Управление версиями кэша: OPcache автоматически отслеживает изменения файлов скриптов и автоматически очищает кэшированные данные, в случае, если файл был изменен или удален, чтобы гарантировать актуальность данных.
OPcache (Optimized Cache) — это расширение для PHP, которое осуществляет кэширование скомпилированного байт-кода PHP для улучшения производительности выполнения скриптов.
OPcache работает в нескольких этапах:
Кэширование байт-кода: После компиляции скомпилированный байт-код кэшируется в памяти OPcache. Кэширование позволяет избежать необходимости компиляции скрипта при каждом его выполнении, что сокращает время обработки запросов.
Повторное использование кэша: При последующих запросах к этому скрипту, PHP загружает его скомпилированный байт-код из кэша OPcache, обеспечивая быстрое выполнение без необходимости повторной компиляции.
OPcache также предоставляет дополнительные возможности для оптимизации производительности:
- Предзагрузка определяемых классов: OPcache может предзагрузить классы, определенные в скриптах, для ускорения их доступа и использования.
- Контроль за памятью: OPcache имеет механизм управления памятью, который позволяет наблюдать за использованием памяти скриптами и в случае необходимости автоматически очищать кэш.
- Управление версиями кэша: OPcache автоматически отслеживает изменения файлов скриптов и автоматически очищает кэшированные данные, в случае, если файл был изменен или удален, чтобы гарантировать актуальность данных.
💡 Что такое Dependency Injection (DI) в PHP и как это работает?
Dependency Injection (DI) — это паттерн проектирования, который помогает сделать код более гибким, удобным для тестирования и слабо связанным.
Вместо того, чтобы объект сам создавал свои зависимости, их передают извне. Это позволяет легко менять зависимости, а также улучшает тестируемость, так как можно подставлять моки вместо реальных объектов.
Как это работает?
Конструкторное внедрение: Зависимости передаются через конструктор класса. Это гарантирует, что объект всегда будет иметь нужные зависимости при создании.
Методическое внедрение: Зависимости передаются через методы класса. Удобно, если нужно менять зависимости во время работы объекта.
Внедрение через свойства: Зависимости можно просто назначать через публичные свойства, но это менее контролируемо.
Пример в реальной жизни:
Представьте систему для работы с пользователями. Вместо того чтобы сам класс
Почему стоит использовать DI?
Меньше связности: Один компонент не зависит от других.
Лучше тестируемость: Легко подменить зависимости на моки.
Гибкость: Легко менять зависимости, не меняя основной код.
Нюанс:
Использование DI может усложнить конфигурацию в больших системах, но это компенсируется преимуществами в долгосрочной перспективе.
🔧 Как реализуется DI в PHP?
Часто для внедрения зависимостей используются контейнеры DI, такие как Symfony DI, PHP-DI или Laravel Service Container, которые автоматически управляют зависимостями.
Dependency Injection (DI) — это паттерн проектирования, который помогает сделать код более гибким, удобным для тестирования и слабо связанным.
Вместо того, чтобы объект сам создавал свои зависимости, их передают извне. Это позволяет легко менять зависимости, а также улучшает тестируемость, так как можно подставлять моки вместо реальных объектов.
Как это работает?
Конструкторное внедрение: Зависимости передаются через конструктор класса. Это гарантирует, что объект всегда будет иметь нужные зависимости при создании.
Методическое внедрение: Зависимости передаются через методы класса. Удобно, если нужно менять зависимости во время работы объекта.
Внедрение через свойства: Зависимости можно просто назначать через публичные свойства, но это менее контролируемо.
Пример в реальной жизни:
Представьте систему для работы с пользователями. Вместо того чтобы сам класс
UserService
создавал класс UserRepository
, вы передаёте его извне, через конструктор. Таким образом, легко подменить репозиторий на другой, например, для тестов.Почему стоит использовать DI?
Меньше связности: Один компонент не зависит от других.
Лучше тестируемость: Легко подменить зависимости на моки.
Гибкость: Легко менять зависимости, не меняя основной код.
Нюанс:
Использование DI может усложнить конфигурацию в больших системах, но это компенсируется преимуществами в долгосрочной перспективе.
🔧 Как реализуется DI в PHP?
Часто для внедрения зависимостей используются контейнеры DI, такие как Symfony DI, PHP-DI или Laravel Service Container, которые автоматически управляют зависимостями.
Сравните include vs required, include_once vs required_once.
Когда речь идет о подключении файлов в PHP, часто используются две пары ключевых слов: include и require, а также include_once и require_once. Давайте рассмотрим их основные различия и сравним их:
include vs require:
include: Используется для включения файла в скрипт. Если файл не найден, PHP выдаст предупреждение, но выполнение скрипта продолжится.
require: Используется для включения файла, и если файл не найден, PHP генерирует фатальную ошибку и останавливает выполнение скрипта.
Рекомендация: Если файл является критически важным для работы скрипта, используйте require, чтобы предотвратить выполнение скрипта в случае отсутствия файла. В противном случае, если вы хотите продолжить выполнение скрипта при отсутствии файла, используйте include.
include_once vs require_once:
include_once: Подключает файл только один раз. Если файл уже был включен ранее, он не будет включен снова.
require_once: Аналогично include_once, но для ключевого слова require. Гарантирует, что файл будет включен только один раз.
Рекомендация: Используйте *_once, если существует вероятность, что файл может быть включен несколько раз, чтобы избежать конфликтов и ошибок.
Когда речь идет о подключении файлов в PHP, часто используются две пары ключевых слов: include и require, а также include_once и require_once. Давайте рассмотрим их основные различия и сравним их:
include vs require:
include: Используется для включения файла в скрипт. Если файл не найден, PHP выдаст предупреждение, но выполнение скрипта продолжится.
require: Используется для включения файла, и если файл не найден, PHP генерирует фатальную ошибку и останавливает выполнение скрипта.
Рекомендация: Если файл является критически важным для работы скрипта, используйте require, чтобы предотвратить выполнение скрипта в случае отсутствия файла. В противном случае, если вы хотите продолжить выполнение скрипта при отсутствии файла, используйте include.
include_once vs require_once:
include_once: Подключает файл только один раз. Если файл уже был включен ранее, он не будет включен снова.
require_once: Аналогично include_once, но для ключевого слова require. Гарантирует, что файл будет включен только один раз.
Рекомендация: Используйте *_once, если существует вероятность, что файл может быть включен несколько раз, чтобы избежать конфликтов и ошибок.