##### В чем различия между 4-ой и 5-ой версиями PHP? Основные изменения в PHP 5: Новая версия движка - Zend Engine 2: увеличилась эффективность и производительность. Объекты передаются по ссылке; добавлен метод клонирования объектов (```__clone```). Новая объектно-ориентированная модель: добавлены интерфейсы, абстрактные классы, добавлены области видимости для свойств и методов (public, protected, private), унифицированный конструктор (__construct), деструктор (__destructor), статические свойства и методы (static), константы (const), добавлены "магические методы" - Magic Methods (основные, кроме ранее перечисленных - __get, __set, __call, __sleep, __wakeup, __toString), финальные методы (final). Добавлены исключения (```try ... catch```). Добавлены новые расширения, улучшена поддержка некоторых существующих. ##### Основные виды баз данных. Иерархические Сетевые Реляционные Объектно-ориентированные ##### Типы таблиц в MySQL. MyISAM InnoDB BerkeleyDB (BDB) MERGE HEAP ISAM ##### Что такое внешние ключи в БД? Внешние ключи используются для организации связей между таблицами базы данных. Когда одно поле в таблице ссылается на другое (не обязательно в этой таблице), оно называется внешним ключом. Поле, на которое оно ссылается, называется родительским ключом. При обновлении поля в родительской таблице автоматически происходит определенное изменение поля в дочерней. Можно задать действие при обновлении родительского ключа (ON UPDATE) и при его удалении (ON DELETE). По стандарту SQL при этом с внешним ключом могут происходить следующие действия, в зависимости от заданных параметров: SET NULL - все внешние ключи, которые ссылаются на обновленный или удаленный родительский ключ, получают значения NULL. SET DEFAULT - устанавливает для всех столбцов, входящих во внешний ключ, значение, определенное по умолчанию в фразе DEFAULT, применяемой к данным столбцам. Если значение не определено, то по умолчанию оно равно NULL. CASCADE - изменение значения родительского ключа автоматически приводит к таким же изменениям в значении (значениях) внешнего ключа. NO ACTION. - значение внешнего ключа не изменяется. Если это приводит к нарушению целостности, оператор не исполняется. По умолчанию используется значение NO ACTION. ##### Что такое реляционная БД? Реляционная база данных - база данных, построенная на основе реляционной модели. В реляционной базе данных каждый объект задается записью (строкой) в двумерной таблице. Каждая таблица представляет собой двумерный массив и обладает следующими свойствами: - имеет уникальное имя. - каждый элемент таблицы — один элемент данных. - все столбцы в таблице однородные, то есть все элементы в столбце имеют одинаковый тип. - каждый столбец имеет уникальное имя. - строки таблицы обязательно отличаются друг от друга хотя бы единственным значением, что позволяет однозначно идентифицировать любую строку такой таблицы. - порядок следования строк и столбцов может быть произвольным. ##### Что такое инкапсуляция, наследование и полиморфизм? Инкапсуляция - это механизм, который объединяет данные и код, манипулирующий зтими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. Когда коды и данные объединяются таким способом, создаётся объект. Наследование - это процесс, посредством которого один объект может приобретать свойства другого и добавлять к ним черты, характерные только для него. Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач, иначе говоря использование одного имени для задания общих для класса действий. Кратко смысл полиморфизма можно выразить фразой: "Один интерфейс, множество реализаций". ##### Что такое MVC? MVC (Model, View, Controller; Модель, Представление, Контроллер) – паттерн, представляющий объектно-ориентированный метод для разделения логики представления, бизнес-логики и модели данных. MVC состоит из объектов трех видов: Модель - это объект приложения, а вид - экранное представление. Контроллер описывает, как интерфейс реагирует на управляющие воздействия пользователя. Иными словами: Представление (вид) отвечает за отображение информации, поступающей из системы или в систему. Модель является "сутью" системы и отвечает за непосредственные алгоритмы, расчёты и тому подобное внутреннее устройство системы. Контроллер является связующим звеном между представлением и моделью системы, посредством которого и существует возможность произвести разделение между ними. Контроллер получает данные от пользователя и передаёт их в модель. Кроме того, он получает сообщения от модели, и передаёт их в представление. За счет использования MVC повышается гибкость и улучшаются возможности повторного использования. ##### Что такое модель OSI? OSI (Open Systems Interconnection Basic Reference Model; базовая эталонная модель взаимодействия открытых систем) - абстрактная сетевая модель для коммуникаций и разработки сетевых протоколов. Представляет уровневый подход к сети. Каждый уровень обслуживает свою часть процесса взаимодействия. Модель состоит из 7-ми уровней, расположенных друг над другом. Уровни взаимодействуют друг с другом (по «вертикали») посредством интерфейсов, и могут взаимодействовать с параллельным уровнем другой системы (по «горизонтали») с помощью протоколов. Каждый уровень может взаимодействовать только со своими соседями и выполнять отведённые только ему функции. Уровни модели OSI: - физический уровень - канальный уровень - сетевой уровень - транспортный уровень - сеансовый уровень - уровень представления - прикладной уровень В настоящее время основным используемым семейством протоколов является TCP/IP. ##### Где PHP по умолчанию сохраняет данные сессии? По умолчанию PHP хранит данные сессии в файлах. ##### Что такое паттерн проектирования singleton и как он реализуется? Гарантирует, что можно создать только один экземпляр класса и предоставляет к нему глобальную точку доступа. Для реализации singleton в классе: 1) задается приватное статичное свойство, в котором хранится объект экземпляра класса; 2) методы ```__construct()``` и ```__clone()``` делаются приватными; 3) для создания экземпляра класса объявляется статичный метод, который при вызове проверяет, хранится ли в приватном свойстве объект данного класса. Если нет, создает объект данного класса, сохраняет в приватном свойстве и возвращает его. Если хранится, то просто возвращает свойство с сохраненным в нем объектом. ##### Что такое представления в БД? Представление — это заранее определенный запрос, результаты выполнения которого сохранены в базе данных, имеют вид обычной таблицы и проявляющие себя подобно таблице, но не требующие дополнительного места для хранения. ##### Зачем нужен HAVING в SQL? HAVING задает условие на группу строк сгруппированной таблицы. Т.е. HAVING подобен WHERE, но выпоняется после группировки. ##### Что такое memcached? Memcached - система кэширования данных в оперативной памяти. Использование memcached позволяет значительно снизить нагрузку на базу данных или файловую систему, данные из которых в нем закэшированы. ##### Отличия таблиц MyISAM от таблиц InnoDB. MyISAM работает в среднем быстрее InnoDB, но в InnoDB реализованы блокировки на уровне строк, что увеличивает скорость работы в приложениях, выполняющих и интенсивное чтение, и интенсивное добавление/изменение данных. InnoDB, в отличии от MyISAM, поддерживает транзакции и внешние ключи. Таблицы MyISAM можно копировать средствами самой файловой системы, в отличии от InnoDB, попытка переместить файлы таблицы которой приведет к потере таблицы. MyISAM поддерживает полнотекстовый поиск.