SobesLab

Junior

  1. Что такое ООП? Какие знаете принципы ООП? Junior

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

    Посмотреть ответ полностью
  2. Какие типы ошибок существуют в PHP? Junior

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

    Посмотреть ответ полностью
  3. Какая система типизации используется в PHP? Плюсы и минусы. Junior

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

    Посмотреть ответ полностью
  4. Какие типы данных поддерживает PHP? Junior

    PHP поддерживает несколько типов данных, включая скалярные (целые числа, числа с плавающей точкой, строки и логические значения) и сложные (массивы и объекты), а также специальные типы, такие как NULL и ресурсы. Понимание этих типов критично для написания эффективного и безопасного кода.

    Посмотреть ответ полностью
  5. Что такое type hinting и чем помогает strict_types? Junior

    Type hinting в PHP позволяет задавать типы аргументов и возвращаемых значений для функций, что улучшает читаемость кода и уменьшает вероятность ошибок, а директива strict_types включает строгую проверку типов, что делает код более предсказуемым и безопасным.

    Посмотреть ответ полностью
  6. Что такое ссылки (&) в PHP и как они работают? Junior

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

    Посмотреть ответ полностью
  7. Инкремент/декремент: префиксный vs постфиксный. Junior

    В PHP есть префиксный и постфиксный инкремент/декремент: префиксный (++x) сначала увеличивает значение переменной и возвращает его, тогда как постфиксный (x++) сначала возвращает текущее значение, а затем увеличивает. Правильное использование этих операторов важно для читаемости и корректности кода.

    Посмотреть ответ полностью
  8. Что такое рекурсия? Когда лучше итерация? Junior

    Рекурсия — это метод, при котором функция вызывает саму себя для решения задач, разбивая их на подзадачи, что удобно для алгоритмов, требующих деления на части, тогда как итерация использует циклы и более эффективна по памяти, предпочтительна для задач с высокими требованиями к производительности.

    Посмотреть ответ полностью
  9. Разница между =, == и ===? Junior

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

    Посмотреть ответ полностью
  10. Чувствителен ли PHP к регистру? Junior

    PHP не чувствителен к регистру для функций, классов и констант, но переменные чувствительны, что означает, что $variable, $Variable и $VARIABLE — это разные переменные. Рекомендуется придерживаться единого стиля написания для улучшения читаемости кода и избежания путаницы.

    Посмотреть ответ полностью
  11. Интерфейс vs абстрактный класс – когда что? Junior

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

    Посмотреть ответ полностью
  12. Модификаторы доступа в PHP Junior

    Модификаторы доступа в PHP (public, protected, private) определяют уровень видимости свойств и методов классов, способствуя инкапсуляции и защите данных. Public предоставляет максимальный доступ, protected ограничивает доступ для наследников, а private обеспечивает максимальную изоляцию, что важно для написания чистого и безопасного кода.

    Посмотреть ответ полностью
  13. Магические методы: что и когда использовать? Junior

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

    Посмотреть ответ полностью
  14. Исключения в PHP: try/catch/finally/throw – базовые практики Junior

    Исключения в PHP позволяют обрабатывать ошибки с помощью конструкций try, catch, finally и throw, что делает код более надежным и удобным для отладки. Эти механизмы помогают управлять неожиданными ситуациями, обеспечивая корректное выполнение кода и упрощая диагностику проблем.

    Посмотреть ответ полностью
  15. Что такое namespace и зачем он нужен? Junior

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

    Посмотреть ответ полностью
  16. SOLID – кратко, по делу Junior

    Принципы SOLID – это набор рекомендаций для проектирования программного обеспечения, направленных на создание понятного и гибкого кода: каждый класс должен иметь одну ответственность (SRP), быть открыт для расширения, но закрыт для изменений (OCP), подклассы должны заменять суперклассы без нарушений (LSP), интерфейсы должны быть узкоспециализированными (ISP), а зависимости – абстрактными (DIP).

    Посмотреть ответ полностью
  17. Что такое PDO и почему его выбирают? Junior

    PDO — это расширение PHP для абстрактного доступа к базам данных, позволяющее использовать единый интерфейс для разных СУБД, обеспечивая безопасность через подготовленные выражения и удобство обработки ошибок, что делает код более гибким и переносимым.

    Посмотреть ответ полностью
  18. mysqli vs PDO – что выбрать? Junior

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

    Посмотреть ответ полностью
  19. Разница include и require Junior

    include и require в PHP используются для подключения файлов, но include продолжает выполнение скрипта при ошибке, а require останавливает выполнение, если файл не найден. include подходит для необязательных файлов, а require — для критически важных.

    Посмотреть ответ полностью
  20. Для чего include_once / require_once? Junior

    include_once и require_once в PHP используются для однократного подключения файлов, где первое генерирует предупреждение при отсутствии файла, а второе — фатальную ошибку, останавливающую выполнение скрипта; их применение помогает избежать дублирования кода и конфликтов при повторном определении функций или классов.

    Посмотреть ответ полностью
  21. Строки в одинарных и двойных кавычках Junior

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

    Посмотреть ответ полностью
  22. Для чего используется оператор @ в PHP и почему им лучше не злоупотреблять? Junior

    Оператор @ в PHP подавляет ошибки при выполнении выражений, что может привести к затруднениям в отладке и снижению производительности; лучше использовать обработку исключений и логирование для управления ошибками.

    Посмотреть ответ полностью
  23. Что такое «переменные переменные» (`$$`) и когда это уместно? Junior

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

    Посмотреть ответ полностью
  24. Разница между `isset()`, `empty()` и `is_null()` c примерами Junior

    Функции isset(), empty() и is_null() в PHP используются для проверки состояния переменных: isset() определяет, установлена ли переменная и не равна ли она null, empty() проверяет, является ли переменная пустой (например, 0, "" или null), а is_null() проверяет, равна ли переменная null.

    Посмотреть ответ полностью
  25. PHP – компилируемый или интерпретируемый язык? Что с JIT и OPCache? Junior

    PHP является интерпретируемым языком, но благодаря JIT-компиляции и OPCache можно значительно повысить его производительность: JIT компилирует код в машинный во время выполнения, а OPCache кэширует скомпилированные скрипты, снижая нагрузку на сервер и ускоряя выполнение.

    Посмотреть ответ полностью
  26. echo vs print: в чём разница и что выбрать на практике? Junior

    echo и print в PHP используются для вывода данных, причем echo быстрее и может принимать несколько аргументов, а print возвращает значение и принимает только один аргумент, что может быть полезно в выражениях.

    Посмотреть ответ полностью
  27. Суперглобальные массивы PHP: что где лежит и на что обратить внимание Junior

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

    Посмотреть ответ полностью
  28. GET vs POST: когда что использовать и почему Junior

    GET используется для получения неконфиденциальной информации и не изменяет состояние сервера, в то время как POST подходит для отправки конфиденциальных данных и операций, изменяющих состояние сервера.

    Посмотреть ответ полностью
  29. Что такое Cookie и какие флаги безопасности обязательно ставить Junior

    Cookies — это небольшие текстовые файлы, используемые для хранения информации о сессиях и предпочтениях пользователей. Важно устанавливать флаги безопасности Secure, HttpOnly и SameSite, чтобы защитить данные от атак и предотвратить утечки информации.

    Посмотреть ответ полностью
  30. Как работает сессия в PHP и что важно настроить в продакшене Junior

    Сессии в PHP позволяют сохранять данные между запросами пользователей, что полезно для аутентификации и хранения состояния. В продакшене важно настраивать безопасность куков (используя атрибуты HttpOnly и Secure), управлять временем жизни сессий и проверять их активность для предотвращения несанкционированного доступа.

    Посмотреть ответ полностью
  31. Что такое буферизация вывода (output buffering) и когда она нужна Junior

    Буферизация вывода в PHP позволяет временно хранить данные в памяти перед их отправкой пользователю, что полезно для управления заголовками, обработки ошибок и оптимизации производительности. Это достигается с помощью функций ob_start(), ob_end_flush() и ob_end_clean(), что позволяет изменять вывод и минимизировать количество запросов к серверу.

    Посмотреть ответ полностью
  32. Для чего функция `header()` в PHP и какие ошибки с ней делают чаще всего? Junior

    Функция header() в PHP отправляет HTTP-заголовки клиенту, позволяя управлять типом контента, редиректами и кэшированием. Частые ошибки включают вызов функции после вывода контента, неиспользование exit() при редиректе и неправильный формат заголовков.

    Посмотреть ответ полностью
  33. Статика в PHP: где полезна, а где вредит? Junior

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

    Посмотреть ответ полностью
  34. Операторы ?? и ?-> (null coalescing и nullsafe): чем помогают Junior

    Операторы ?? и ?-> в PHP упрощают работу с неопределёнными переменными и объектами: ?? позволяет задавать значения по умолчанию, если переменная равна null, а ?-> безопасно обращается к свойствам и методам объектов, предотвращая ошибки при работе с неинициализированными объектами.

    Посмотреть ответ полностью
  35. Сессия vs Cookie: что где хранить Junior

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

    Посмотреть ответ полностью
  36. Что такое PSR и зачем они нужны в PHP-экосистеме Junior

    PSR — это набор стандартов для PHP, который улучшает совместимость и качество кода, облегчая интеграцию различных библиотек и фреймворков, а также делает код более понятным и предсказуемым для разработчиков.

    Посмотреть ответ полностью
  37. Примеры важных PSR и их назначение Junior

    PSR (PHP Standards Recommendations) — это набор стандартов, разработанных для повышения совместимости и читаемости кода в PHP, включая правила оформления, автозагрузки классов и работы с HTTP-сообщениями, что упрощает командную разработку и поддержку кода.

    Посмотреть ответ полностью
  38. Что такое JIT в PHP и когда от него есть польза Junior

    JIT в PHP — это технология компиляции кода "на лету", которая значительно увеличивает производительность, особенно при выполнении вычислительно интенсивных задач и повторяющихся операций, за счет компиляции часто используемых участков кода в машинный код.

    Посмотреть ответ полностью
  39. MVC простыми словами и зачем он нужен Junior

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

    Посмотреть ответ полностью
  40. Паттерны проектирования: что реально пригодится на бэкенде Junior

    Паттерны проектирования — это проверенные решения для распространённых проблем, которые помогают создавать устойчивый и поддерживаемый код на бэкенде. Примеры полезных паттернов включают Singleton для одного экземпляра, Factory Method для создания объектов, Observer для отслеживания событий и Strategy для выбора алгоритмов.

    Посмотреть ответ полностью
  41. Что такое TDD и как им пользоваться без фанатизма Junior

    TDD (разработка через тестирование) — это методология, при которой сначала пишутся тесты, а затем код, чтобы обеспечить высокое качество и минимизировать ошибки. Главный принцип — итеративный процесс: написать тест, запустить его, реализовать код, пройти тест и при необходимости рефакторить, что помогает создавать чистый и надежный код.

    Посмотреть ответ полностью
  42. Unit/Functional-тесты и моки в PHP: как не утонуть Junior

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

    Посмотреть ответ полностью
  43. Unit vs Integration: что именно отличает и как выбирать баланс Junior

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

    Посмотреть ответ полностью
  44. Что такое mock-объект и как не сделать тесты хрупкими Junior

    Mock-объект — это объект, который имитирует поведение реального объекта для изоляции тестируемого кода от внешних зависимостей, упрощая тестирование. Чтобы избежать хрупких тестов, используйте интерфейсы, минимизируйте зависимости, четко определяйте ожидания и регулярно пересматривайте тесты.

    Посмотреть ответ полностью
  45. Что такое Composer и как им правильно пользоваться в проде и деве Junior

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

    Посмотреть ответ полностью

Middle

  1. Что такое вариативные функции и оператор "..." (variadics / splat) в PHP? Middle

    Вариативные функции в PHP позволяют создавать функции с переменным количеством аргументов, используя оператор "..." для их обработки, что делает код более гибким и удобным.

    Посмотреть ответ полностью
  2. Что происходит от ввода URL до ответа страницы (сетевой путь запроса)? Middle

    При вводе URL браузер сначала разрешает доменное имя в IP-адрес через DNS, затем устанавливает соединение с сервером, отправляет HTTP-запрос, который сервер обрабатывает и формирует HTTP-ответ, после чего браузер отображает полученное содержимое страницы.

    Посмотреть ответ полностью
  3. Позднее статическое связывание (Late Static Binding) – как и зачем? Middle

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

    Посмотреть ответ полностью
  4. Copy-on-Write (COW) в PHP – что это и как влияет на производительность? Middle

    Copy-on-Write (COW) в PHP — это оптимизация управления памятью, которая позволяет создавать ссылки на данные вместо их копирования, что улучшает производительность, снижая использование памяти и увеличивая скорость выполнения до момента изменения данных.

    Посмотреть ответ полностью
  5. Передача по значению или по ссылке в PHP? Что с объектами? Middle

    В PHP аргументы могут передаваться по значению, создавая их копию, или по ссылке, позволяя изменять оригинальные переменные. Объекты всегда передаются по ссылке, что требует внимания к изменениям, чтобы избежать непредсказуемого поведения.

    Посмотреть ответ полностью
  6. Генераторы (yield) – когда лучше, чем массивы. Middle

    Генераторы в PHP позволяют эффективно обрабатывать большие объемы данных, экономя память и выполняя вычисления по мере необходимости, что делает их идеальными для работы с потоками данных, в то время как массивы лучше подходят для многократного доступа и сложных манипуляций.

    Посмотреть ответ полностью
  7. Глубокое vs поверхностное копирование объектов Middle

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

    Посмотреть ответ полностью
  8. Dependency Injection и DI-контейнер – зачем и как применять? Middle

    Dependency Injection (DI) — это паттерн, который улучшает модульность и тестируемость кода, позволяя передавать зависимости извне, а не создавать их внутри объекта. DI-контейнер управляет этими зависимостями, обеспечивая автоматизацию и централизованную конфигурацию, что делает систему более гибкой и легко расширяемой.

    Посмотреть ответ полностью
  9. Как работает автозагрузка (PSR-4) и Composer autoload? Middle

    Автозагрузка в PHP позволяет автоматически загружать классы без ручного подключения файлов, что особенно полезно в больших проектах. Стандарт PSR-4 определяет, как организовать классы и их соответствующие директории, а Composer упрощает эту задачу, обеспечивая автоматическое создание файлов автозагрузки на основе конфигурации в composer.json.

    Посмотреть ответ полностью
  10. OPcache: что он кеширует и как его правильно настроить Middle

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

    Посмотреть ответ полностью
  11. Как выявить злоупотребление статическими методами и чем заменить? Middle

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

    Посмотреть ответ полностью
  12. Ключевое слово final – где уместно? Middle

    Ключевое слово final в PHP предотвращает переопределение методов и наследование классов, обеспечивая безопасность и предсказуемость кода. Его целесообразно использовать для защиты критически важных методов и классов, но следует избегать излишнего ограничения гибкости архитектуры.

    Посмотреть ответ полностью
  13. Reflection API: зачем он нужен и чем может навредить? Middle

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

    Посмотреть ответ полностью
  14. OWASP и Top-10: что должен знать бэкенд-разработчик на практике Middle

    OWASP — это организация, занимающаяся безопасностью ПО, а её список Top-10 включает самые критичные уязвимости веб-приложений, такие как инъекции, сломанная аутентификация и утечка данных, знание которых помогает бэкенд-разработчику защищать приложения и данные пользователей.

    Посмотреть ответ полностью
  15. Типовые уязвимости (SQLi/XSS/CSRF/IDOR) и как закрыть их без “магии” Middle

    Типовые уязвимости веб-приложений, такие как SQL-инъекции, XSS, CSRF и IDOR, требуют понимания и применения методов защиты, включая использование подготовленных выражений, экранирование ввода, токены CSRF и контроль доступа, чтобы обеспечить безопасность и предотвратить несанкционированный доступ.

    Посмотреть ответ полностью
  16. Идемпотентность HTTP: какие методы идемпотентны и как проектировать ретраи Middle

    Идемпотентность в HTTP означает, что многократное выполнение одного и того же запроса не изменяет состояние ресурса после первого вызова; к идемпотентным методам относятся GET, PUT и DELETE, что важно учитывать при проектировании систем с механизмами повторных попыток (ретрай).

    Посмотреть ответ полностью
  17. Почему HTTP – stateless и как хранить состояние поверх него без боли Middle

    HTTP является stateless-протоколом, что упрощает масштабируемость и снижает нагрузку на сервер, так как каждый запрос не хранит информацию о предыдущих. Состояние можно хранить с помощью cookies, сессий, Local Storage, Session Storage или URL-параметров, каждый из методов имеет свои преимущества и недостатки.

    Посмотреть ответ полностью
  18. SOAP vs REST – основные отличия и когда что выбрать Middle

    SOAP — это протокол для создания веб-сервисов с использованием XML и строгими стандартами, обеспечивающий высокую безопасность и поддержку сложных операций, а REST — это архитектурный стиль, использующий HTTP и предлагающий гибкость, простоту и высокую производительность, что делает его предпочтительным для легких и быстрых приложений.

    Посмотреть ответ полностью
  19. Способы аутентификации/авторизации в API и их подводные камни Middle

    Аутентификация и авторизация в API обеспечивают безопасность и контроль доступа, используя методы, такие как Basic Authentication, Token-based Authentication, OAuth и API Keys, каждый из которых имеет свои преимущества и недостатки. Важно применять SSL для защиты данных, управлять сессиями и учитывать масштабируемость выбранного метода.

    Посмотреть ответ полностью
  20. Что может содержать интерфейс в PHP? Middle

    Интерфейс в PHP определяет контракт для классов, включая объявления методов и константы, но не может содержать свойства. Все методы интерфейса должны быть публичными, а интерфейсы могут наследовать друг друга для создания более сложных структур.

    Посмотреть ответ полностью
  21. Клонирование с вложенными объектами: как сделать глубокую копию? Middle

    Глубокое клонирование в PHP позволяет создавать независимые копии объектов с учетом вложенных объектов, что достигается путем переопределения метода __clone() и использования оператора clone для всех свойств, которые являются объектами.

    Посмотреть ответ полностью
  22. Что такое Singleton в PHP, почему его считают антипаттерном и как обойтись без него? Middle

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

    Посмотреть ответ полностью
  23. Что такое трейты в PHP и когда их стоит использовать? Middle

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

    Посмотреть ответ полностью
  24. Redis: чем полезен и какие структуры данных выручат в проде Middle

    Redis — это высокопроизводительное хранилище данных в памяти, которое поддерживает различные структуры данных, такие как строки, хеши, списки и множества, что делает его идеальным для задач с высокой нагрузкой и позволяет эффективно управлять данными и их постоянством.

    Посмотреть ответ полностью
  25. Memcached: когда он уместнее Redis Middle

    Memcached — это легковесное решение для простого кэширования данных, оптимизированное для высокой скорости и легкости внедрения, идеально подходящее для приложений с простыми сценариями кэширования и требованиями к масштабируемости, в отличие от более функционального Redis.

    Посмотреть ответ полностью
  26. Redis vs Memcached: как выбрать быстро и без сожалений Middle

    Redis и Memcached — это решения для кэширования, где Memcached лучше подходит для простых ключ-значение, а Redis предлагает поддержку различных структур данных и возможности персистентности, что делает его более подходящим для сложных приложений. Выбор зависит от ваших требований к функциональности и сложности системы.

    Посмотреть ответ полностью
  27. Кэширование (Redis/Memcached): плюсы, минусы и безопасные стратегии Middle

    Кэширование, используя Redis и Memcached, значительно ускоряет работу веб-приложений, снижая нагрузку на серверы; Redis предлагает сложные структуры данных и персистентность, тогда как Memcached прост в использовании и масштабируем, но не сохраняет данные. Важно правильно выбирать инструмент, управлять временем жизни кэша, следить за его состоянием и обеспечивать безопасность данных.

    Посмотреть ответ полностью
  28. Apache vs Nginx: что выбрать и как правильно подружить с PHP-FPM Middle

    При выборе между Apache и Nginx для работы с PHP важно учитывать, что Apache предлагает гибкость и поддержку модулей, но требует больше ресурсов, тогда как Nginx обеспечивает высокую производительность и низкое потребление памяти. Интеграция с PHP-FPM требует разных конфигураций для каждого сервера, где Apache использует модуль mod_proxy_fcgi, а Nginx - блоки для обработки PHP.

    Посмотреть ответ полностью

Senior

  1. Опишите жизненный цикл HTTP-запроса в PHP-приложении (например, в рамках фреймворка). Senior

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

    Посмотреть ответ полностью
  2. Какие стратегии кеширования данных и HTML вы применяли? Как выбирали между Redis, Memcached и другими решениями? Senior

    Кеширование данных и HTML улучшает производительность веб-приложений, позволяя временно хранить результаты запросов и готовые страницы. Выбор между Redis и Memcached зависит от требований по хранению данных, персистентности и сложности операций: Redis подходит для сложных структур, а Memcached — для простых кеширующих задач.

    Посмотреть ответ полностью
  3. Как вы организуете обработку долгих (тяжелых) задач в PHP-приложении? Senior

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

    Посмотреть ответ полностью
  4. Опишите, как вы проводите профилирование и отладку производительности приложения. Senior

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

    Посмотреть ответ полностью
  5. Какие подходы к обеспечению безопасности (Security) PHP-приложения вы считаете наиболее важными? Senior

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

    Посмотреть ответ полностью
  6. Как вы проектируете архитектуру большого приложения? На что обращаете внимание в первую очередь? Senior

    Проектирование архитектуры большого приложения требует понимания бизнес- и технических требований, выбора подходящего архитектурного стиля (монолит, микросервисы или событийная архитектура), а также внимания к масштабируемости, безопасности и документации. Важно начинать с минимально жизнеспособного продукта, получать обратную связь и избегать избыточной сложности.

    Посмотреть ответ полностью
  7. Что такое CQRS/Event Sourcing? В каких сценариях это уместно применять и почему? Senior

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

    Посмотреть ответ полностью
  8. Что такое когезия и связность (cohesion и coupling) в коде? Senior

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

    Посмотреть ответ полностью
  9. Можно ли использовать null в параметрах или возвращаемых значениях методов? Почему это считается плохой практикой? Senior

    Использование null в параметрах и возвращаемых значениях методов может обозначать отсутствие данных, но это приводит к неявным ошибкам, снижает ясность кода и усложняет поддержку. Лучше использовать исключения или классы-обёртки для более безопасного и понятного кода.

    Посмотреть ответ полностью
  10. Что такое паттерн Special Case / Null Object? Senior

    Паттерн Special Case или Null Object позволяет избежать использования null для объектов, создавая специальный объект, который реализует интерфейс, но не выполняет действий. Это упрощает код, делает его более читаемым и уменьшает вероятность ошибок, связанных с проверкой на null.

    Посмотреть ответ полностью
  11. Как тестировать код, который обращается к внешним API или сервисам? Senior

    Тестирование кода, работающего с внешними API, включает модульное, интеграционное и энд-ту-энд тестирование с использованием моков и стабов для имитации ответов. Важно проверять как успешные сценарии, так и обработку ошибок, а также использовать библиотеки, такие как Guzzle, для упрощения тестирования. Регулярное тестирование и изоляция тестов помогают поддерживать надежность приложения.

    Посмотреть ответ полностью
  12. Что такое Domain-Driven Design (DDD)? Senior

    Domain-Driven Design (DDD) — это методология проектирования ПО, фокусирующаяся на бизнес-домене и тесном сотрудничестве с экспертами для создания моделей, отражающих бизнес-логику, что позволяет эффективно адаптироваться к изменениям в требованиях.

    Посмотреть ответ полностью
  13. Что такое антипаттерны? Примеры. Senior

    Антипаттерны — это распространенные, но неэффективные решения в разработке программного обеспечения, которые приводят к проблемам и усложнениям. Примеры включают "божественный объект", "спагетти-код" и "волшебные числа", и их следует избегать для создания более чистого и поддерживаемого кода.

    Посмотреть ответ полностью
  14. Как вы проводите рефакторинг большого legacy-кода и убеждаете руководство в его необходимости? Senior

    Рефакторинг — это процесс улучшения структуры кода без изменения его поведения, необходимый для повышения читаемости и поддерживаемости legacy-кода; его важно проводить постепенно, с тестированием и документированием изменений, а для убеждения руководства следует использовать метрики и аргументировать долгосрочные выгоды.

    Посмотреть ответ полностью
  15. Сталкивались ли вы с утечками памяти в PHP? Как находили и устраняли их? Senior

    Утечки памяти в PHP возникают, когда память не освобождается после использования, что может замедлить работу приложения. Для их обнаружения используются инструменты профилирования, такие как Xdebug, а устранение включает оптимизацию кода, очистку глобальных переменных и регулярное тестирование.

    Посмотреть ответ полностью
  16. Как работает сборщик мусора (Garbage Collector) в PHP? Когда имеет смысл вручную вызвать GC? Senior

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

    Посмотреть ответ полностью
  17. Какие инструменты статического анализа кода (линтеры) для PHP вы использовали? Senior

    Статический анализ кода в PHP включает инструменты, такие как PHP_CodeSniffer для проверки стандартов кодирования, PHPStan и Psalm для анализа типов и выявления ошибок, а также PHPMD для обнаружения потенциальных проблем. Эти инструменты помогают повысить качество кода и снизить количество ошибок, что критично для надежной разработки.

    Посмотреть ответ полностью
  18. Какие инструменты профилирования и анализа производительности PHP-кода вы знаете? Senior

    Существуют различные инструменты профилирования и анализа производительности PHP-кода, такие как Xdebug, Blackfire и Tideways, которые помогают выявлять узкие места и оптимизировать приложения, используя как профилирование в реальном времени, так и статический анализ кода.

    Посмотреть ответ полностью
  19. Какой уровень покрытия тестами вы считаете достаточным? Всегда ли нужен 100% охват? Senior

    Оптимальный уровень покрытия тестами зависит от проекта и обычно составляет 70-90%; 100% покрытие не всегда необходимо, так как может потребовать значительных затрат времени и не гарантирует отсутствие ошибок, поэтому важно сосредоточиться на тестировании критических участков кода.

    Посмотреть ответ полностью
  20. Что такое триггер в SQL и для чего он используется? Senior

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

    Посмотреть ответ полностью
  21. Какие уровни изоляции транзакций существуют в СУБД? Senior

    Уровни изоляции транзакций в СУБД определяют, как изменения одной транзакции становятся видимыми для других, с четырьмя основными уровнями: Read Uncommitted, Read Committed, Repeatable Read и Serializable, каждый из которых балансирует между целостностью данных и производительностью.

    Посмотреть ответ полностью
  22. Чем реляционные СУБД отличаются от NoSQL баз данных? Примеры NoSQL баз. Senior

    Реляционные СУБД организуют данные в таблицы с фиксированной схемой и поддерживают ACID-транзакции, тогда как NoSQL базы предлагают гибкость в хранении данных без строгой схемы, поддерживая горизонтальное масштабирование и различные модели хранения, такие как документная или колонковая.

    Посмотреть ответ полностью
  23. Что означает ACID в контексте транзакций баз данных? Senior

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

    Посмотреть ответ полностью
  24. В чем разница между Dependency Injection и Service Locator? Senior

    Dependency Injection (DI) передает зависимости в объект извне, упрощая тестирование и уменьшая связанность, тогда как Service Locator (SL) предоставляет доступ к зависимостям через центральный объект, что может привести к скрытости зависимостей и усложнению тестирования.

    Посмотреть ответ полностью
  25. Горизонтальная масштабируемость PHP-приложения: архитектурные приёмы и ловушки Senior

    Горизонтальная масштабируемость PHP-приложения позволяет увеличить производительность за счёт добавления новых серверов, используя подходы, такие как балансировка нагрузки, кэширование и микросервисная архитектура, при этом важно избегать распространённых ошибок, таких как неэффективная балансировка и проблемы с состоянием.

    Посмотреть ответ полностью
  26. Оптимизация работы с БД на высоких нагрузках: чек-лист с приоритетами Senior

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

    Посмотреть ответ полностью
  27. Чувствительные данные (PII, финансы, секреты): хранение, доступ и логирование Senior

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

    Посмотреть ответ полностью
  28. Что такое Swoole или ReactPHP и какие задачи они решают? Senior

    Swoole и ReactPHP — это библиотеки для асинхронного программирования на PHP, которые обеспечивают высокую производительность и масштабируемость; Swoole использует многопоточность для обработки множества соединений, в то время как ReactPHP основан на событийном цикле, что делает его более простым, но менее производительным для долгих операций.

    Посмотреть ответ полностью
  29. Что такое микросервисная архитектура? Senior

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

    Посмотреть ответ полностью
  30. Какие способы взаимодействия между микросервисами вы знаете? Senior

    Существует несколько способов взаимодействия между микросервисами, включая REST API для простого и понятного взаимодействия, gRPC для высокой производительности, системы очередей сообщений для асинхронного обмена и событийную архитектуру для снижения связанности. Каждый подход имеет свои преимущества и недостатки, и выбор зависит от требований проекта.

    Посмотреть ответ полностью
  31. Как вы относитесь к микросервисной архитектуре? В каких случаях её стоит применять, а в каких – нет? Senior

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

    Посмотреть ответ полностью
  32. Laravel Service Container: как работает, чем отличаются singleton/instance/bind и где уместны contextual binding и service providers? Senior

    Service Container в Laravel управляет зависимостями классов, позволяя регистрировать их с помощью методов bind, singleton и instance, а также использовать contextual binding для выбора разных реализаций в зависимости от контекста. Service Providers служат для конфигурации и регистрации сервисов, упрощая процесс разработки и тестирования.

    Посмотреть ответ полностью
  33. Laravel Eloquent: как избегать N+1 и перегрузки памяти на больших выборках? Senior

    Для избежания проблем с производительностью в Laravel Eloquent, таких как N+1 запросы, используйте метод with() для предварительной загрузки связанных сущностей, а также методы chunk() и cursor() для обработки больших выборок данных по частям, что помогает снизить нагрузку на память.

    Посмотреть ответ полностью
  34. Symfony HTTP-lifecycle: какие этапы проходит запрос и где лучше перехватывать логику? Senior

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

    Посмотреть ответ полностью
  35. Symfony DI: autowire/autoconfigure, публичность сервисов, параметры окружения и compiler passes – когда и как применять? Senior

    В Symfony Dependency Injection управляет зависимостями между компонентами приложения, используя механизмы autowire и autoconfigure для автоматической настройки сервисов, а также публичность сервисов для контроля их доступности. Параметры окружения позволяют менять конфигурацию в зависимости от среды, а compiler passes дают возможность модифицировать контейнер DI перед компиляцией, что улучшает...

    Посмотреть ответ полностью
  36. Symfony Messenger: как организовать sync/async обработку, ретраи и отказоустойчивость? Senior

    Symfony Messenger позволяет организовать синхронную и асинхронную обработку сообщений в PHP-приложениях, управляя ретраями и отказоустойчивостью через настройку обработчиков и транспортов, а также использование механизма обработки неудачных сообщений.

    Посмотреть ответ полностью
  37. Что такое дедлок (deadlock) в базе данных? Senior

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

    Посмотреть ответ полностью
  38. Что такое репликация базы данных и какие виды репликации вы знаете? Senior

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

    Посмотреть ответ полностью
  39. Что такое шардинг базы данных? Senior

    Шардинг базы данных — это метод горизонтального масштабирования, при котором данные распределяются по нескольким серверам для уменьшения нагрузки и повышения производительности, что особенно важно при работе с большими объемами данных.

    Посмотреть ответ полностью
  40. Объясните суть теоремы CAP в распределённых системах. Senior

    Теорема CAP описывает ограничения распределённых систем, утверждая, что при сетевых разделениях можно обеспечить только два из трёх свойств: согласованность, доступность и устойчивость к разделениям, что требует от разработчиков выбора приоритетов в архитектуре приложения.

    Посмотреть ответ полностью
  41. В чем разница между потоком (thread) и процессом? Senior

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

    Посмотреть ответ полностью
  42. Возможна ли многопоточность в PHP и как этого можно добиться? Senior

    Многопоточность в PHP не поддерживается изначально, но её можно реализовать с помощью расширений, таких как pcntl для работы с процессами, pthreads для потоков, и библиотек, как ReactPHP или Gearman, которые обеспечивают асинхронное выполнение задач.

    Посмотреть ответ полностью
  43. Как получить значение приватного свойства объекта извне класса? Senior

    Для получения значения приватного свойства объекта в PHP рекомендуется использовать публичные методы доступа (геттеры), которые сохраняют инкапсуляцию. Альтернативно можно применять рефлексию, но это усложняет код и может привести к ошибкам.

    Посмотреть ответ полностью
  44. Что такое Event Sourcing? Senior

    Event Sourcing — это паттерн, который сохраняет изменения состояния системы в виде событий вместо текущего состояния, что позволяет восстановить полную историю изменений и текущее состояние. Он полезен для анализа и работы с распределенными системами, но требует внимания к реализации и управлению объемом данных.

    Посмотреть ответ полностью
  45. Что такое eventual consistency (конечная согласованность) в распределённых системах? Senior

    Конечная согласованность — это модель согласованности данных в распределённых системах, которая допускает временные несоответствия, но гарантирует, что при отсутствии новых обновлений все узлы в конечном итоге станут согласованными. Эта модель важна для обеспечения высокой доступности и устойчивости системы, даже если она жертвует строгой согласованностью.

    Посмотреть ответ полностью
  46. Что такое GraphQL и чем он отличается от REST? Senior

    GraphQL — это язык запросов для API, позволяющий клиентам запрашивать только необходимые данные в одном запросе, что повышает эффективность по сравнению с REST, где каждый ресурс имеет свой конечный пункт. Он обеспечивает большую гибкость в структуре ответов и избегает проблем с версионированием, позволяя клиентам точно определять, какие данные им нужны.

    Посмотреть ответ полностью
  47. Что такое Docker и для чего он используется? Каково основное устройство Docker-контейнеров? Senior

    Docker — это платформа для создания и развертывания приложений в контейнерах, которые обеспечивают изоляцию, портативность и легкость масштабирования. Контейнеры содержат все необходимые зависимости и конфигурации, позволяя приложениям работать одинаково на разных средах.

    Посмотреть ответ полностью
  48. Чем отличается горизонтальное масштабирование от вертикального? Senior

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

    Посмотреть ответ полностью
  49. Что предпочтительнее: наследование или композиция? Поясните, в чем разница между ними. Senior

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

    Посмотреть ответ полностью
  50. Какие паттерны используются в ORM (Object-Relational Mapping) библиотеках? (Примеры Active Record, Data Mapper) Senior

    ORM библиотеки в PHP используют паттерны Active Record и Data Mapper для упрощения взаимодействия с базами данных; Active Record объединяет данные и логику в одном объекте, в то время как Data Mapper разделяет бизнес-логику и доступ к данным, что обеспечивает большую гибкость и чистоту архитектуры, особенно в сложных приложениях.

    Посмотреть ответ полностью
  51. Сессии в кластере PHP: стратегии, блокировки и миграции без потерь Senior

    Управление сессиями в кластере PHP критично для обеспечения последовательного пользовательского опыта, и включает стратегии хранения в базе данных, использовании Redis или файловой системе, а также методы предотвращения блокировок и безопасной миграции сессий без потерь.

    Посмотреть ответ полностью
  52. Что такое OPCODE в PHP? Senior

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

    Посмотреть ответ полностью

Смежные категории

Рекомендуемые категории