1. Как устроен интернет?
Интернет — это глобальная сеть, состоящая из множества соединённых между собой устройств, которые обмениваются данными. Основу его структуры составляют серверы, маршрутизаторы и протоколы, такие как TCP/IP, которые обеспечивают передачу информации.
2. Как работает DNS?
DNS (Domain Name System) — это система, которая преобразует доменные имена, понятные человеку, в IP-адреса, понятные компьютерам. Когда пользователь вводит адрес сайта, DNS-сервер находит соответствующий IP-адрес и направляет запрос на нужный сервер.
3. Что происходит, когда пользователь набирает запрос в браузере?
Когда пользователь вводит запрос, браузер сначала проверяет кэш, затем обращается к DNS для получения IP-адреса, после чего устанавливается соединение с сервером. Сервер обрабатывает запрос и отправляет обратно HTML-код страницы, который браузер отображает пользователю.
4. Какой путь проходит запрос, чтобы попасть в приложение?
Запрос проходит через несколько слоёв: сначала он поступает на веб-сервер, который обрабатывает его, затем передаётся на сервер приложений, где выполняется бизнес-логика, и в конце обращается к базе данных для получения необходимых данных, после чего результат снова отправляется пользователю.
5. Какие бывают методы HTTP?
Основные методы HTTP включают GET (для получения данных), POST (для отправки данных на сервер), PUT (для обновления данных), DELETE (для удаления данных) и PATCH (для частичного обновления данных). Каждый метод имеет своё назначение и семантику.
6. Чем отличается PUT от PATCH?
PUT используется для замены всего ресурса, в то время как PATCH предназначен для частичного обновления ресурса. Это означает, что при использовании PUT необходимо передать все данные, а при PATCH — только те поля, которые нужно изменить.
7. Какие запросы являются демпотентными?
Демпотентные запросы — это такие запросы, которые могут быть выполнены несколько раз без изменения результата, например, GET, PUT и DELETE. Это означает, что повторный вызов не изменит состояние сервера.
8. Где можно хранить сессии пользователя и для чего они нужны?
Сессии пользователя можно хранить в памяти сервера, в файлах или в базе данных. Они необходимы для отслеживания состояния пользователя между запросами, например, для аутентификации и сохранения пользовательских данных.
9. Что такое REST API?
REST API — это архитектурный стиль, который использует принципы REST (Representational State Transfer) для создания веб-сервисов. Он основывается на использовании стандартных HTTP-методов и предоставляет доступ к ресурсам через URL.
10. Что такое менеджер пакетов Composer?
Composer — это инструмент для управления зависимостями в PHP-проектах. Он позволяет разработчикам легко устанавливать, обновлять и управлять библиотеками и пакетами, необходимыми для их приложений.
11. В чем разница между командами install и update Composer?
Команда install устанавливает зависимости, указанные в файле composer.json, и создает файл composer.lock, если его нет. Команда update обновляет все зависимости до последних версий, соответствующих ограничениям, указанным в composer.json.
12. Как работать с Docker и Dockerfile?
Docker позволяет создавать, развертывать и управлять контейнерами, а Dockerfile — это текстовый файл, содержащий инструкции для сборки образа. Для работы с Docker нужно использовать команды, такие как docker build, docker run и docker-compose.
13. Как добавить PHP в Docker, если его там нет?
Чтобы добавить PHP в Docker, нужно создать Dockerfile, в котором указать базовый образ с PHP, например, FROM php:7.4-apache. Затем можно использовать команды для установки необходимых расширений и настройки окружения.
14. Как пробросить конфиги в Docker?
Конфиги можно пробросить в Docker-контейнер с помощью volume или bind mount, указав соответствующие параметры в docker run или в docker-compose.yml. Это позволяет использовать локальные файлы конфигурации внутри контейнера.
15. В чем разница между git merge и git rebase?
git merge объединяет две ветки, создавая новый коммит слияния, в то время как git rebase перемещает коммиты одной ветки на вершину другой, изменяя историю. Rebase делает историю более линейной, но может усложнить её понимание при работе в команде.
16. Что такое git reflog?
git reflog — это команда, которая отображает журнал всех ссылок на коммиты в репозитории, включая те, которые были потеряны или удалены. Это полезно для восстановления потерянных коммитов или веток.
17. Что такое ElasticSearch и Redis?
ElasticSearch — это распределённая поисковая и аналитическая система, основанная на Lucene, которая позволяет быстро искать и анализировать большие объёмы данных. Redis — это in-memory хранилище данных, которое поддерживает структуры данных и используется для кэширования и управления сессиями.
18. Как писать тесты на PHPUnit?
Для написания тестов на PHPUnit необходимо создать класс, который наследует PHPUnit\Framework\TestCase, и определить методы с префиксом test. Затем можно использовать различные методы утверждения, такие как assertEquals, для проверки ожидаемого результата.
19. Что такое интеграционные, юнит-тесты и функциональные тесты?
Юнит-тесты проверяют отдельные компоненты кода, интеграционные тесты — взаимодействие между несколькими компонентами, а функциональные тесты проверяют работу приложения как целого. Каждый тип тестирования служит своей цели в обеспечении качества кода.
20. Что такое системы мониторинга (например, Prometheus)?
Системы мониторинга, такие как Prometheus, собирают и хранят метрики о работе приложений и инфраструктуры, позволяя отслеживать их состояние и производительность. Они помогают выявлять проблемы и обеспечивать стабильность работы сервисов.
21. Откроет ли повторный запрос новое соединение в PHP-FPM?
Повторный запрос не обязательно откроет новое соединение в PHP-FPM, так как PHP-FPM управляет пулом процессов, которые могут обрабатывать несколько запросов. Однако, если все процессы заняты, может быть создано новое соединение.
22. Какие условия нужны для этого (PHP-FPM)?
Для открытия нового соединения в PHP-FPM необходимо, чтобы все рабочие процессы были заняты, а настройки pm.max_children достигли своего предела. В этом случае новые запросы будут ждать, пока не освободится процесс.
23. Что нового в последней версии PHP?
В последней версии PHP были добавлены новые функции и улучшения, такие как улучшенная поддержка типов, новые синтаксические конструкции и оптимизации производительности. Также улучшена безопасность и добавлены новые возможности для работы с асинхронным кодом.
24. В чем разница между предыдущими версиями PHP?
Различия между версиями PHP заключаются в улучшениях производительности, новых возможностях языка, таких как типизация, и изменениях в стандартной библиотеке. Каждая новая версия также включает в себя исправления ошибок и уязвимостей.
25. Какие могут быть проблемы с переходом на новую версию PHP?
Проблемы могут возникнуть из-за несовместимости кода с новыми функциями или изменениями в поведении языка. Также могут возникнуть проблемы с устаревшими библиотеками и зависимостями, которые не поддерживают новую версию PHP.
26. Что такое PSR (PHP Standarts Recommendations)?
PSR — это набор стандартов и рекомендаций для разработки на PHP, разработанных PHP-FIG. Они помогают обеспечить совместимость и единообразие кода между различными проектами и библиотеками.
27. Чем отличается PSR-0 от PSR-4?
PSR-0 и PSR-4 — это стандарты автозагрузки классов в PHP. PSR-0 требует, чтобы структура каталогов соответствовала пространствам имён, в то время как PSR-4 упрощает структуру, позволяя использовать более гибкие пути для автозагрузки классов.
28. Что такое ООП?
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на использовании объектов, которые инкапсулируют данные и методы. ООП позволяет создавать более структурированный и поддерживаемый код.
29. Расшифруй каждую букву SOLID с примерами.
S — Single Responsibility Principle (Принцип единственной ответственности): класс должен иметь только одну причину для изменения. O — Open/Closed Principle (Принцип открытости/закрытости): классы должны быть открыты для расширения, но закрыты для модификации. L — Liskov Substitution Principle (Принцип подстановки Лисков): объекты подклассов должны быть заменяемы объектами суперкласса. I — Interface Segregation Principle (Принцип разделения интерфейсов): интерфейсы должны быть узкоспециализированными. D — Dependency Inversion Principle (Принцип инверсии зависимостей): зависимости должны зависеть от абстракций, а не от конкретных классов.
30. Что такое магические методы PHP?
Магические методы в PHP — это специальные методы, которые начинаются с двух символов подчеркивания, такие как __construct, __destruct, __get, __set, и т.д. Они позволяют управлять поведением объектов в определённых ситуациях, таких как создание, уничтожение или доступ к свойствам.
31. Для чего используются магические методы PHP?
Магические методы используются для реализации специфического поведения объектов, например, для автоматической инициализации свойств при создании объекта, обработки вызовов неопределённых методов и свойств, а также для очистки ресурсов при уничтожении объекта.
32. Можно ли сделать конструктор приватным? Как получить экземпляр объекта в таком случае?
Да, конструктор можно сделать приватным, что позволяет создавать экземпляры класса только внутри самого класса. Для получения экземпляра можно использовать паттерн Singleton, который предоставляет статический метод для создания и доступа к единственному экземпляру класса.
33. В чем разница между передачей аргументов по ссылке и по значению? Когда это может "выстрелить себе в ногу"?
Передача по значению создает копию аргумента, а передача по ссылке позволяет изменять оригинальный аргумент. Это может привести к непредсказуемым результатам, если разработчик не ожидает изменения исходного значения переменной при передаче по ссылке.
34. Как в PHP получить тело запроса?
Для получения тела запроса в PHP можно использовать file_get_contents("php://input"), что позволяет получить необработанные данные, отправленные в теле запроса, например, в формате JSON или XML.
35. Как обработать переменное количество аргументов в PHP?
Переменное количество аргументов можно обрабатывать с помощью оператора ... (спред-оператора) в определении функции, что позволяет передавать неограниченное количество аргументов, которые будут доступны в виде массива внутри функции.
36. Что такое генераторы и итераторы в PHP? Для чего они служат?
Генераторы — это специальные функции, которые позволяют создавать итераторы, не требуя реализации интерфейса Iterator. Они служат для упрощения работы с последовательностями данных, позволяя возвращать значения по одному, экономя память.
37. Что делает ключевое слово yield?
Ключевое слово yield используется в генераторах для возврата значения и приостановки выполнения функции. При следующем вызове генератора выполнение продолжается с места, где оно было остановлено, что позволяет эффективно обрабатывать большие наборы данных.
38. Что такое трейты?
Трейты — это механизм в PHP, который позволяет повторно использовать код в разных классах. Они позволяют добавлять функциональность в классы без необходимости наследования, что помогает избежать проблем с множественным наследованием.
39. Можно ли использовать трейт в трейте?
Да, в PHP можно использовать трейт внутри другого трейта. Это позволяет создавать более сложные и многоуровневые структуры повторно используемого кода.
40. Что будет, если подключить в класс трейты с одинаковыми именами методов?
Если подключить трейты с одинаковыми именами методов, PHP выдаст ошибку о конфликте имен. Чтобы избежать этого, можно использовать псевдонимы методом as, чтобы переименовать методы при использовании трейтов.
41. Можно ли вызвать приватный метод в трейте?
Да, приватные методы трейта могут быть вызваны в классе, который использует этот трейт. Однако они не могут быть вызваны извне этого класса, так как остаются приватными.
42. В чем минусы использования трейтов?
Минусы использования трейтов включают сложность в понимании структуры кода и возможные конфликты имен методов. Также трейты не поддерживают состояние, что может ограничивать их использование в некоторых случаях.
43. Чем абстрактные классы отличаются от обычных классов и интерфейсов?
Абстрактные классы могут содержать как абстрактные методы (без реализации), так и обычные методы с реализацией, в то время как интерфейсы могут содержать только объявления методов. Кроме того, класс может наследовать только один абстрактный класс, но реализовывать несколько интерфейсов.
44. Что такое замыкания?
Замыкания — это анонимные функции, которые могут захватывать переменные из своей области видимости. Это позволяет создавать функции с сохранением состояния, что полезно для создания колбеков и обработчиков событий.
45. В чем разница между статическими и обычными замыканиями?
Статические замыкания не захватывают переменные из внешней области видимости, а обычные замыкания могут захватывать такие переменные. Это влияет на то, какие данные доступны внутри замыкания.
46. Влияет ли статическое замыкание на производительность?
Статическое замыкание может иметь небольшое влияние на производительность, так как не требует захвата переменных, что упрощает работу с памятью. Однако это влияние обычно незначительно и зависит от конкретного случая использования.
47. Для чего нужна директива declare (strict_types=1)?
Директива declare(strict_types=1) включает строгую типизацию в PHP, что заставляет язык проверять соответствие типов аргументов и возвращаемых значений. Это помогает избежать ошибок, связанных с неявным преобразованием типов.
48. Что будет, если не использовать строгую типизацию?
Если не использовать строгую типизацию, PHP будет автоматически преобразовывать типы при передаче аргументов и возвращении значений. Это может привести к неожиданным результатам и ошибкам, которые сложно отследить.
49. Влияет ли типизация на производительность?
Типизация может влиять на производительность, но в большинстве случаев это влияние незначительно. Строгая типизация может немного замедлить выполнение, но её преимущества в виде повышения безопасности кода и упрощения отладки обычно перевешивают эти затраты.
50. Что такое сервис-контейнер в паттернах/проектировании?
Сервис-контейнер — это паттерн проектирования, который управляет зависимостями объектов и их жизненным циклом. Он позволяет инъектировать зависимости в классы, упрощая управление и тестирование кода.
51. Что такое паттерн репозитория?
Паттерн репозитория — это шаблон проектирования, который абстрагирует доступ к данным, позволяя отделить логику доступа к данным от бизнес-логики приложения. Это упрощает тестирование и замену источников данных.
52. Как использовать эти паттерны?
Для использования паттерна репозитория необходимо создать интерфейс, определяющий методы доступа к данным, и реализовать его в классе репозитория. Затем сервис-контейнер может инъектировать этот репозиторий в классы, которые его используют.
53. Что такое ORM (Например, Doctrine)?
ORM (Object-Relational Mapping) — это технология, которая позволяет работать с базами данных, используя объектно-ориентированный подход. Doctrine — это популярный ORM для PHP, который упрощает взаимодействие с базой данных, позволяя использовать объекты вместо SQL-запросов.
54. В чем разница между ORM и сырыми SQL-запросами?
ORM позволяет работать с базой данных через объекты и методы, что делает код более читаемым и поддерживаемым, тогда как сырые SQL-запросы требуют написания SQL-кода и могут быть более эффективными в определённых случаях. ORM также абстрагирует детали реализации базы данных.
55. Когда выгодно использовать ORM, а когда - сырые запросы?
ORM выгодно использовать, когда требуется высокая производительность разработки, простота поддержки и читаемость кода. Сырые SQL-запросы могут быть предпочтительнее, когда требуется максимальная производительность или специфичные оптимизации запросов.
56. Какие вопросы могут быть по конкретному фреймворку (Laravel, Symfony, Yii2)?
Вопросы могут касаться архитектуры фреймворка, его компонентов, принципов работы с маршрутизацией, ORM, системами шаблонов, а также особенностей тестирования и развертывания приложений. Также могут быть вопросы о лучших практиках и паттернах проектирования.
57. Что такое индексы в базах данных?
Индексы — это структуры данных, которые ускоряют поиск и сортировку записей в таблицах баз данных. Они позволяют уменьшить время доступа к данным, но могут замедлять операции вставки и обновления.
58. Какие бывают индексы?
Существуют несколько типов индексов: уникальные индексы (гарантируют уникальность значений), составные индексы (индексы по нескольким столбцам), полнотекстовые индексы (для поиска по тексту) и битовые индексы (для оптимизации поиска по битовым полям).
59. Что такое составные индексы?
Составные индексы — это индексы, которые создаются по нескольким столбцам таблицы. Они позволяют ускорить запросы, которые фильтруют или сортируют данные по нескольким полям одновременно.
60. Когда индексы могут навредить?
Индексы могут навредить, если их слишком много или они созданы по неэффективным столбцам. Это может привести к увеличению времени на операции вставки и обновления, а также к увеличению использования дискового пространства.
61. Какие бывают виды JOIN?
Существует несколько видов JOIN: INNER JOIN (возвращает только совпадающие строки), LEFT JOIN (возвращает все строки из левой таблицы и совпадающие из правой), RIGHT JOIN (возвращает все строки из правой таблицы и совпадающие из левой) и FULL JOIN (возвращает все строки из обеих таблиц).
62. Чем отличаются разные виды JOIN?
INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах, в то время как LEFT JOIN возвращает все строки из левой таблицы, даже если нет совпадений в правой. RIGHT JOIN делает то же самое, но для правой таблицы, а FULL JOIN возвращает все строки из обеих таблиц, заполняя отсутствующие значения NULL.
63. Что такое агрегатные функции?
Агрегатные функции — это функции, которые обрабатывают набор данных и возвращают одно значение, например, COUNT(), SUM(), AVG(), MAX(), MIN(). Они используются для вычисления статистических данных по столбцам таблиц.
64. Что делает команда HAVING?
Команда HAVING используется для фильтрации результатов группировки, созданной с помощью GROUP BY. Она позволяет применять условия к агрегатным функциям, что невозможно сделать с помощью WHERE.
65. Что такое оконные функции?
Оконные функции — это функции, которые выполняют вычисления по набору строк, связанных с текущей строкой, не группируя их. Они позволяют выполнять сложные аналитические операции, такие как вычисление скользящих средних или ранжирование.
66. Что такое транзакции?
Транзакции — это последовательности операций, которые выполняются как единое целое. Они обеспечивают целостность данных, гарантируя, что все операции либо выполняются успешно, либо не выполняются вовсе.
67. Какие бывают уровни изоляции транзакций?
Существуют четыре уровня изоляции транзакций: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ и SERIALIZABLE. Каждый уровень определяет, как транзакции видят изменения других транзакций, что влияет на целостность и производительность.
68. Как оптимизировать запрос к базе данных?
Для оптимизации запросов можно использовать индексы, избегать SELECT *, использовать подзапросов, анализировать планы выполнения, а также избегать ненужных вычислений в запросах. Также полезно следить за статистикой и производительностью базы данных.
69. Как узнать что запрос медленный?
Медленные запросы можно выявить с помощью инструментов профилирования, таких как EXPLAIN, а также с помощью журналов медленных запросов, которые можно включить в настройках базы данных. Это поможет выявить запросы, которые требуют слишком много времени на выполнение.
70. Написать простой SQL-запрос.
Простой SQL-запрос для выборки всех пользователей из таблицы users может выглядеть так:
SELECT * FROM users;
71. Что такое KISS?
Расшифровывается, как будь проще в написании кода.
72. Что такое YAGNI?
Данная аббревиатура расшифровывается, как вам это не понадобится (избыточно). Предупреждает от использования избыточных функций, методов в написании своего кода.
73. Что такое DRY?
DRY означает, не повторяться в коде, избегать дублирующих вставок в коде. Использовать абстракции, трейты и прочие приемы для создания уникального кода без повторений.
74. Что такое DDD?
DDD - это набор принципов и схем направленных на создание оптимальных систем объектов.
75. Какие принципы ООП существуют?
Основные принципы ОООП - это наследование, полиморфизм, инкапсуляция, абстракция.
76. Какие типы данных существуют в PHP?
Основные типы данных в PHP - это целые, с плавающей точкой, строки, булевые переменные, массивы, объекты, NULL и ресурсы.
77. Какие виды СУБД вы знаете?
Существуют реляционные и нереляционные СУБД. Если более подробная градация деления СУБД нужна, то можно перечислить такие виды: текстовые СУБД, иерархические СУБД, сетевые СУБД, реляционные СУБД, нереляционные СУБД, ключ-значения СУБД, графовые СУБД).
MS SQL SERVER, ORACLE, MYSQL, POSTGRES, MONGODB, REDIS, SHOWFLAKE, ELASTICSEARCH, CLICK HOUSE.
Этот запрос вернет все записи из таблицы users.1. Как устроен интернет?
Интернет — это глобальная сеть, состоящая из множества соединённых между собой устройств, которые обмениваются данными. Основу его структуры составляют серверы, маршрутизаторы и протоколы, такие как TCP/IP, которые обеспечивают передачу информации.
2. Как работает DNS?
DNS (Domain Name System) — это система, которая преобразует доменные имена, понятные человеку, в IP-адреса, понятные компьютерам. Когда пользователь вводит адрес сайта, DNS-сервер находит соответствующий IP-адрес и направляет запрос на нужный сервер.
3. Что происходит, когда пользователь набирает запрос в браузере?
Когда пользователь вводит запрос, браузер сначала проверяет кэш, затем обращается к DNS для получения IP-адреса, после чего устанавливается соединение с сервером. Сервер обрабатывает запрос и отправляет обратно HTML-код страницы, который браузер отображает пользователю.
4. Какой путь проходит запрос, чтобы попасть в приложение?
Запрос проходит через несколько слоёв: сначала он поступает на веб-сервер, который обрабатывает его, затем передаётся на сервер приложений, где выполняется бизнес-логика, и в конце обращается к базе данных для получения необходимых данных, после чего результат снова отправляется пользователю.
5. Какие бывают методы HTTP?
Основные методы HTTP включают GET (для получения данных), POST (для отправки данных на сервер), PUT (для обновления данных), DELETE (для удаления данных) и PATCH (для частичного обновления данных). Каждый метод имеет своё назначение и семантику.
6. Чем отличается PUT от PATCH?
PUT используется для замены всего ресурса, в то время как PATCH предназначен для частичного обновления ресурса. Это означает, что при использовании PUT необходимо передать все данные, а при PATCH — только те поля, которые нужно изменить.
7. Какие запросы являются демпотентными?
Демпотентные запросы — это такие запросы, которые могут быть выполнены несколько раз без изменения результата, например, GET, PUT и DELETE. Это означает, что повторный вызов не изменит состояние сервера.
8. Где можно хранить сессии пользователя и для чего они нужны?
Сессии пользователя можно хранить в памяти сервера, в файлах или в базе данных. Они необходимы для отслеживания состояния пользователя между запросами, например, для аутентификации и сохранения пользовательских данных.
9. Что такое REST API?
REST API — это архитектурный стиль, который использует принципы REST (Representational State Transfer) для создания веб-сервисов. Он основывается на использовании стандартных HTTP-методов и предоставляет доступ к ресурсам через URL.
10. Что такое менеджер пакетов Composer?
Composer — это инструмент для управления зависимостями в PHP-проектах. Он позволяет разработчикам легко устанавливать, обновлять и управлять библиотеками и пакетами, необходимыми для их приложений.
11. В чем разница между командами install и update Composer?
Команда install устанавливает зависимости, указанные в файле composer.json, и создает файл composer.lock, если его нет. Команда update обновляет все зависимости до последних версий, соответствующих ограничениям, указанным в composer.json.
12. Как работать с Docker и Dockerfile?
Docker позволяет создавать, развертывать и управлять контейнерами, а Dockerfile — это текстовый файл, содержащий инструкции для сборки образа. Для работы с Docker нужно использовать команды, такие как docker build, docker run и docker-compose.
13. Как добавить PHP в Docker, если его там нет?
Чтобы добавить PHP в Docker, нужно создать Dockerfile, в котором указать базовый образ с PHP, например, FROM php:7.4-apache. Затем можно использовать команды для установки необходимых расширений и настройки окружения.
14. Как пробросить конфиги в Docker?
Конфиги можно пробросить в Docker-контейнер с помощью volume или bind mount, указав соответствующие параметры в docker run или в docker-compose.yml. Это позволяет использовать локальные файлы конфигурации внутри контейнера.
15. В чем разница между git merge и git rebase?
git merge объединяет две ветки, создавая новый коммит слияния, в то время как git rebase перемещает коммиты одной ветки на вершину другой, изменяя историю. Rebase делает историю более линейной, но может усложнить её понимание при работе в команде.
16. Что такое git reflog?
git reflog — это команда, которая отображает журнал всех ссылок на коммиты в репозитории, включая те, которые были потеряны или удалены. Это полезно для восстановления потерянных коммитов или веток.
17. Что такое ElasticSearch и Redis?
ElasticSearch — это распределённая поисковая и аналитическая система, основанная на Lucene, которая позволяет быстро искать и анализировать большие объёмы данных. Redis — это in-memory хранилище данных, которое поддерживает структуры данных и используется для кэширования и управления сессиями.
18. Как писать тесты на PHPUnit?
Для написания тестов на PHPUnit необходимо создать класс, который наследует PHPUnit\Framework\TestCase, и определить методы с префиксом test. Затем можно использовать различные методы утверждения, такие как assertEquals, для проверки ожидаемого результата.
19. Что такое интеграционные, юнит-тесты и функциональные тесты?
Юнит-тесты проверяют отдельные компоненты кода, интеграционные тесты — взаимодействие между несколькими компонентами, а функциональные тесты проверяют работу приложения как целого. Каждый тип тестирования служит своей цели в обеспечении качества кода.
20. Что такое системы мониторинга (например, Prometheus)?
Системы мониторинга, такие как Prometheus, собирают и хранят метрики о работе приложений и инфраструктуры, позволяя отслеживать их состояние и производительность. Они помогают выявлять проблемы и обеспечивать стабильность работы сервисов.
21. Откроет ли повторный запрос новое соединение в PHP-FPM?
Повторный запрос не обязательно откроет новое соединение в PHP-FPM, так как PHP-FPM управляет пулом процессов, которые могут обрабатывать несколько запросов. Однако, если все процессы заняты, может быть создано новое соединение.
22. Какие условия нужны для этого (PHP-FPM)?
Для открытия нового соединения в PHP-FPM необходимо, чтобы все рабочие процессы были заняты, а настройки pm.max_children достигли своего предела. В этом случае новые запросы будут ждать, пока не освободится процесс.
23. Что нового в последней версии PHP?
В последней версии PHP были добавлены новые функции и улучшения, такие как улучшенная поддержка типов, новые синтаксические конструкции и оптимизации производительности. Также улучшена безопасность и добавлены новые возможности для работы с асинхронным кодом.
24. В чем разница между предыдущими версиями PHP?
Различия между версиями PHP заключаются в улучшениях производительности, новых возможностях языка, таких как типизация, и изменениях в стандартной библиотеке. Каждая новая версия также включает в себя исправления ошибок и уязвимостей.
25. Какие могут быть проблемы с переходом на новую версию PHP?
Проблемы могут возникнуть из-за несовместимости кода с новыми функциями или изменениями в поведении языка. Также могут возникнуть проблемы с устаревшими библиотеками и зависимостями, которые не поддерживают новую версию PHP.
26. Что такое PSR (PHP Standarts Recommendations)?
PSR — это набор стандартов и рекомендаций для разработки на PHP, разработанных PHP-FIG. Они помогают обеспечить совместимость и единообразие кода между различными проектами и библиотеками.
27. Чем отличается PSR-0 от PSR-4?
PSR-0 и PSR-4 — это стандарты автозагрузки классов в PHP. PSR-0 требует, чтобы структура каталогов соответствовала пространствам имён, в то время как PSR-4 упрощает структуру, позволяя использовать более гибкие пути для автозагрузки классов.
28. Что такое ООП?
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на использовании объектов, которые инкапсулируют данные и методы. ООП позволяет создавать более структурированный и поддерживаемый код.
29. Расшифруй каждую букву SOLID с примерами.
S — Single Responsibility Principle (Принцип единственной ответственности): класс должен иметь только одну причину для изменения. O — Open/Closed Principle (Принцип открытости/закрытости): классы должны быть открыты для расширения, но закрыты для модификации. L — Liskov Substitution Principle (Принцип подстановки Лисков): объекты подклассов должны быть заменяемы объектами суперкласса. I — Interface Segregation Principle (Принцип разделения интерфейсов): интерфейсы должны быть узкоспециализированными. D — Dependency Inversion Principle (Принцип инверсии зависимостей): зависимости должны зависеть от абстракций, а не от конкретных классов.
30. Что такое магические методы PHP?
Магические методы в PHP — это специальные методы, которые начинаются с двух символов подчеркивания, такие как __construct, __destruct, __get, __set, и т.д. Они позволяют управлять поведением объектов в определённых ситуациях, таких как создание, уничтожение или доступ к свойствам.
31. Для чего используются магические методы PHP?
Магические методы используются для реализации специфического поведения объектов, например, для автоматической инициализации свойств при создании объекта, обработки вызовов неопределённых методов и свойств, а также для очистки ресурсов при уничтожении объекта.
32. Можно ли сделать конструктор приватным? Как получить экземпляр объекта в таком случае?
Да, конструктор можно сделать приватным, что позволяет создавать экземпляры класса только внутри самого класса. Для получения экземпляра можно использовать паттерн Singleton, который предоставляет статический метод для создания и доступа к единственному экземпляру класса.
33. В чем разница между передачей аргументов по ссылке и по значению? Когда это может "выстрелить себе в ногу"?
Передача по значению создает копию аргумента, а передача по ссылке позволяет изменять оригинальный аргумент. Это может привести к непредсказуемым результатам, если разработчик не ожидает изменения исходного значения переменной при передаче по ссылке.
34. Как в PHP получить тело запроса?
Для получения тела запроса в PHP можно использовать file_get_contents("php://input"), что позволяет получить необработанные данные, отправленные в теле запроса, например, в формате JSON или XML.
35. Как обработать переменное количество аргументов в PHP?
Переменное количество аргументов можно обрабатывать с помощью оператора ... (спред-оператора) в определении функции, что позволяет передавать неограниченное количество аргументов, которые будут доступны в виде массива внутри функции.
36. Что такое генераторы и итераторы в PHP? Для чего они служат?
Генераторы — это специальные функции, которые позволяют создавать итераторы, не требуя реализации интерфейса Iterator. Они служат для упрощения работы с последовательностями данных, позволяя возвращать значения по одному, экономя память.
37. Что делает ключевое слово yield?
Ключевое слово yield используется в генераторах для возврата значения и приостановки выполнения функции. При следующем вызове генератора выполнение продолжается с места, где оно было остановлено, что позволяет эффективно обрабатывать большие наборы данных.
38. Что такое трейты?
Трейты — это механизм в PHP, который позволяет повторно использовать код в разных классах. Они позволяют добавлять функциональность в классы без необходимости наследования, что помогает избежать проблем с множественным наследованием.
39. Можно ли использовать трейт в трейте?
Да, в PHP можно использовать трейт внутри другого трейта. Это позволяет создавать более сложные и многоуровневые структуры повторно используемого кода.
40. Что будет, если подключить в класс трейты с одинаковыми именами методов?
Если подключить трейты с одинаковыми именами методов, PHP выдаст ошибку о конфликте имен. Чтобы избежать этого, можно использовать псевдонимы методом as, чтобы переименовать методы при использовании трейтов.
41. Можно ли вызвать приватный метод в трейте?
Да, приватные методы трейта могут быть вызваны в классе, который использует этот трейт. Однако они не могут быть вызваны извне этого класса, так как остаются приватными.
42. В чем минусы использования трейтов?
Минусы использования трейтов включают сложность в понимании структуры кода и возможные конфликты имен методов. Также трейты не поддерживают состояние, что может ограничивать их использование в некоторых случаях.
43. Чем абстрактные классы отличаются от обычных классов и интерфейсов?
Абстрактные классы могут содержать как абстрактные методы (без реализации), так и обычные методы с реализацией, в то время как интерфейсы могут содержать только объявления методов. Кроме того, класс может наследовать только один абстрактный класс, но реализовывать несколько интерфейсов.
44. Что такое замыкания?
Замыкания — это анонимные функции, которые могут захватывать переменные из своей области видимости. Это позволяет создавать функции с сохранением состояния, что полезно для создания колбеков и обработчиков событий.
45. В чем разница между статическими и обычными замыканиями?
Статические замыкания не захватывают переменные из внешней области видимости, а обычные замыкания могут захватывать такие переменные. Это влияет на то, какие данные доступны внутри замыкания.
46. Влияет ли статическое замыкание на производительность?
Статическое замыкание может иметь небольшое влияние на производительность, так как не требует захвата переменных, что упрощает работу с памятью. Однако это влияние обычно незначительно и зависит от конкретного случая использования.
47. Для чего нужна директива declare (strict_types=1)?
Директива declare(strict_types=1) включает строгую типизацию в PHP, что заставляет язык проверять соответствие типов аргументов и возвращаемых значений. Это помогает избежать ошибок, связанных с неявным преобразованием типов.
48. Что будет, если не использовать строгую типизацию?
Если не использовать строгую типизацию, PHP будет автоматически преобразовывать типы при передаче аргументов и возвращении значений. Это может привести к неожиданным результатам и ошибкам, которые сложно отследить.
49. Влияет ли типизация на производительность?
Типизация может влиять на производительность, но в большинстве случаев это влияние незначительно. Строгая типизация может немного замедлить выполнение, но её преимущества в виде повышения безопасности кода и упрощения отладки обычно перевешивают эти затраты.
50. Что такое сервис-контейнер в паттернах/проектировании?
Сервис-контейнер — это паттерн проектирования, который управляет зависимостями объектов и их жизненным циклом. Он позволяет инъектировать зависимости в классы, упрощая управление и тестирование кода.
51. Что такое паттерн репозитория?
Паттерн репозитория — это шаблон проектирования, который абстрагирует доступ к данным, позволяя отделить логику доступа к данным от бизнес-логики приложения. Это упрощает тестирование и замену источников данных.
52. Как использовать эти паттерны?
Для использования паттерна репозитория необходимо создать интерфейс, определяющий методы доступа к данным, и реализовать его в классе репозитория. Затем сервис-контейнер может инъектировать этот репозиторий в классы, которые его используют.
53. Что такое ORM (Например, Doctrine)?
ORM (Object-Relational Mapping) — это технология, которая позволяет работать с базами данных, используя объектно-ориентированный подход. Doctrine — это популярный ORM для PHP, который упрощает взаимодействие с базой данных, позволяя использовать объекты вместо SQL-запросов.
54. В чем разница между ORM и сырыми SQL-запросами?
ORM позволяет работать с базой данных через объекты и методы, что делает код более читаемым и поддерживаемым, тогда как сырые SQL-запросы требуют написания SQL-кода и могут быть более эффективными в определённых случаях. ORM также абстрагирует детали реализации базы данных.
55. Когда выгодно использовать ORM, а когда - сырые запросы?
ORM выгодно использовать, когда требуется высокая производительность разработки, простота поддержки и читаемость кода. Сырые SQL-запросы могут быть предпочтительнее, когда требуется максимальная производительность или специфичные оптимизации запросов.
56. Какие вопросы могут быть по конкретному фреймворку (Laravel, Symfony, Yii2)?
Вопросы могут касаться архитектуры фреймворка, его компонентов, принципов работы с маршрутизацией, ORM, системами шаблонов, а также особенностей тестирования и развертывания приложений. Также могут быть вопросы о лучших практиках и паттернах проектирования.
57. Что такое индексы в базах данных?
Индексы — это структуры данных, которые ускоряют поиск и сортировку записей в таблицах баз данных. Они позволяют уменьшить время доступа к данным, но могут замедлять операции вставки и обновления.
58. Какие бывают индексы?
Существуют несколько типов индексов: уникальные индексы (гарантируют уникальность значений), составные индексы (индексы по нескольким столбцам), полнотекстовые индексы (для поиска по тексту) и битовые индексы (для оптимизации поиска по битовым полям).
59. Что такое составные индексы?
Составные индексы — это индексы, которые создаются по нескольким столбцам таблицы. Они позволяют ускорить запросы, которые фильтруют или сортируют данные по нескольким полям одновременно.
60. Когда индексы могут навредить?
Индексы могут навредить, если их слишком много или они созданы по неэффективным столбцам. Это может привести к увеличению времени на операции вставки и обновления, а также к увеличению использования дискового пространства.
61. Какие бывают виды JOIN?
Существует несколько видов JOIN: INNER JOIN (возвращает только совпадающие строки), LEFT JOIN (возвращает все строки из левой таблицы и совпадающие из правой), RIGHT JOIN (возвращает все строки из правой таблицы и совпадающие из левой) и FULL JOIN (возвращает все строки из обеих таблиц).
62. Чем отличаются разные виды JOIN?
INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах, в то время как LEFT JOIN возвращает все строки из левой таблицы, даже если нет совпадений в правой. RIGHT JOIN делает то же самое, но для правой таблицы, а FULL JOIN возвращает все строки из обеих таблиц, заполняя отсутствующие значения NULL.
63. Что такое агрегатные функции?
Агрегатные функции — это функции, которые обрабатывают набор данных и возвращают одно значение, например, COUNT(), SUM(), AVG(), MAX(), MIN(). Они используются для вычисления статистических данных по столбцам таблиц.
64. Что делает команда HAVING?
Команда HAVING используется для фильтрации результатов группировки, созданной с помощью GROUP BY. Она позволяет применять условия к агрегатным функциям, что невозможно сделать с помощью WHERE.
65. Что такое оконные функции?
Оконные функции — это функции, которые выполняют вычисления по набору строк, связанных с текущей строкой, не группируя их. Они позволяют выполнять сложные аналитические операции, такие как вычисление скользящих средних или ранжирование.
66. Что такое транзакции?
Транзакции — это последовательности операций, которые выполняются как единое целое. Они обеспечивают целостность данных, гарантируя, что все операции либо выполняются успешно, либо не выполняются вовсе.
67. Какие бывают уровни изоляции транзакций?
Существуют четыре уровня изоляции транзакций: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ и SERIALIZABLE. Каждый уровень определяет, как транзакции видят изменения других транзакций, что влияет на целостность и производительность.
68. Как оптимизировать запрос к базе данных?
Для оптимизации запросов можно использовать индексы, избегать SELECT *, использовать подзапросов, анализировать планы выполнения, а также избегать ненужных вычислений в запросах. Также полезно следить за статистикой и производительностью базы данных.
69. Как узнать что запрос медленный?
Медленные запросы можно выявить с помощью инструментов профилирования, таких как EXPLAIN, а также с помощью журналов медленных запросов, которые можно включить в настройках базы данных. Это поможет выявить запросы, которые требуют слишком много времени на выполнение.
70. Написать простой SQL-запрос.
Простой SQL-запрос для выборки всех пользователей из таблицы users может выглядеть так:
SELECT * FROM users;
Этот запрос вернет все записи из таблицы users.
Если вы считаете текст данного блога оскорбительным или некорректным, напишите об этом по адресу IntegralAL@mail.ru
с URL-адресом блога. В теме письма пишите <Жалоба>, либо <Неккоректно>.