Собеседования

Вопросы и ответы на собеседованиях PHP программистов. Часть 2

1. Чем отличается аутентификация от авторизации?

Аутентификация (authentication) — процедура проверки подлинности.

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

Авторизация (authorization) — предоставление и проверка прав пользователя на выполнение определенных действий.

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

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


2. Что такое интерфейс и абстрактный класс? Зачем они нужны?

По сути, абстрактные классы и интерфейсы — это чертежи.

Интерфейсы могут содержать только абстрактные методы.

Абстрактный метод — метод класса, реализация для которого отсутствует.

В абстрактном классе можно объявлять и использовать переменные и методы (не только абстрактные).

Объект создать ни от абстрактного класса, ни от интерфейса не получится, их можно только наследовать. Для наследования абстрактного класса используется ключевое слово extends, для наследования интерфейса используется ключевое слово implements. Дочерний класс напрямую может наследовать только один класс (не важно, абстрактный или нет), интерфейсов может наследовать несколько (implements Interface1, Interface2, Interface3, ….). Абстрактные методы обязательно должны быть переопределены в наследующем классе (если только он не является абстрактным в свою очередь).

Зачем?

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

В абстрактном классе реализуют методы общие для потомков. К примеру: для экземпляров классов Triangle и Rectangle (унаследованных от абстрактного класса Figure, содержащего реализацию универсального метода draw) мы можем применять метод draw не задумываясь о его реализации, т.к. он реализован в родительском классе Figure.


3. Нормализация в БД.

Нормализация БД — сложная и обширная тема. Вряд ли я смогу обойтись несколькими абзацами и хорошо это объяснить. Потому, просто оставлю это здесь: ссылка 1ссылка 2.


4. Что такое магические методы в PHP?

Любой встроенный метод в php, который начинается с __ называется магическим. Их особенность состоит в том, что они могут вызываться при совершении какого-то действия автоматически и без ведома программиста.

Это методы:

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(),__invoke(), __set_state(), __clone(), __debugInfo()

Лучше всего о них написано в официальном руководстве.

 

5. Какие паттерны проектирования знаете?

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

К счастью, я наткнулся на эту статью. Здесь есть небольшая шпаргалка по паттернам (в конце статьи есть pdf документ). Рекомендую к ознакомлению!

http://habrahabr.ru/post/210288/

 

6. Какие методы http Вы знаете?

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

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

P.S. Если я где-то допустил неточность — пишите в комментарии, спасибо!

Поделитесь с друзьями или сохраните себе
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Напишите комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


2 × пять =