22 самых распространенных вопроса на собеседованиях на должность веб-разработчика

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

Несмотря на то, что данная статья не претендует на объективность, она включает в себя все основные вопросы, которые могут быть заданы по теме PHP, JS, JQuery, CSS, HTML, MySQL и ООП, а также развернутые ответы на них.

Изучив эти темы, вы заметно улучшите свою теоретическую базу и значительно увеличите свои шансы на получение заветной работы.


— Сколько типов данных в РНР?

PHP поддерживает 8 базовых типов данных.

4 скалярных типа:

— boolean. Логический тип данных, переменные данного типа могут принимать значения true или false.

— integer. Целочисленный тип данных, переменные могут принимать целые значения (…-2, -1, 0, 1, 2…) в диапазоне от -2^31 до +2^31. Если значение превышает данный порог — оно автоматически переводится в тип float.

— float. Числовой тип данных с плавающей точкой, может содержать как целые, так и дробные величины.

— string. Строковый тип данных. Содержит нефиксированное количество различных символов. PHP не накладывает никаких ограничений на длину строки, поэтому можно смело работать даже с ОЧЕНЬ большими строками.

2 комплексных (составных) типа:

— array. Массив, содержит упорядоченный список элементов.

— object. Объект, содержит некий объект (экземпляр класса).

2 специальных типа:

— resource. Ссылка на абстрактный элемент, т.н. внешний ресурс. Примеры внешних ресурсов — ссылка на файл и ссылка на результат выполнения запроса.

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


— Что такое static функция и чем она отличается от «обычной» (не static)?

Static принадлежит классу, а не экземпляру класса. И вызывается у класса, а не у объекта, т.е. напрямую. Объявление свойств и методов класса статическими позволяет обращаться к ним без создания экземпляра класса. Атрибут класса, объявленный статическим, не может быть доступен посредством экземпляра класса (но статический метод может быть вызван). Так как статические методы вызываются без создания экземпляра класса, то псевдопеременная $this недоступна внутри метода, объявленного статическим. Доступ к статическим свойствам класса не может быть получен через оператор ->.


— Есть ли разница между одинарными и двойными кавычками в PHP?

В двойных кавычках данные «парсятся», а в одинарных – нет. При двойных кавычках в данном случае выведется Chimay, а при одинарных — $beer.


— Написать программу, которая выводит простые числа, т.е. делящиеся без остатка только на себя и на 1.


— Напиши программу-цензор, которая бы заменяла вводимые пользователем в форму слова «fuck», «idiot» и «bitch» на «f**k», «id**t» и «bi**h».


— Что такое динамические переменные?

Динамической переменной считается та, имя которой хранится в самой переменной. Это так называемая «переменная переменная». Например:

$$var — динамическая, ее имя может меняться вместе с изменением $var. Также можно связать имя переменной с содержимым другой переменной неявно:


— Что такое шаблоны (паттерны) проектирования?

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


— Напиши пример реализации полиморфизма.


 — Какие еще есть парадигмы (модели, подходы) программирования кроме ООП?

Из тех, что наиболее часто встречаются: функциональная, аспектно-ориентированная и процeдурная.


— Нужно алертом вывести какое-то сообщение, спустя 3 секунды после запуска скрипта. Как это сделать?

Так:

Или так:


— Расскажите пару слов об объектах в JavaScript

Объекты (они же — ассоциативные массивы, хэши) и работа с ними в JavaScript реализованы не так, как в большинстве языков. Объект в JavaScript представляет собой обычный ассоциативный массив или, иначе говоря, «хэш». Он хранит любые соответствия «ключ => значение» и имеет несколько стандартных методов.


— Есть две функции. Есть ли между ними разница? Если есть, то какая?

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

— Что cделает код: break me_baby; ?

Выйдет из текущего блока цикла или switch на метку «me_baby».


— Что такое SQL-инъекция?

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


— Допустим, у вас есть Интернет-магазин. Составьте запрос, который покажет, сколько денег принес каждый отдельно взятый покупатель в общей сложности за всё время существования магазина.


— В чем разница между записью #my и .my?

#my – селектор ID.

.my – селектор класса.


— Что такое псевдоклассы?

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

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


— Найти все элементы div с классом one, а также все элементы p с классом two, затем добавить им всем класс three и визуально плавно спустить вниз.


— Выбрать div`ы, у которых нет класса cls


 — Что такое DOCTYPE и зачем он нужен?

DOCTYPE — это определение типа документа (Document Type Definition (DTD)), правила, в соответствии с которыми осуществляется проверка конкретного документа (веб-страницы) XML или (X)HTML. Благодаря этой записи браузер определяет, какая в данном документе используется версия DTD. А нужен он для того, чтобы браузеры правильно отображали разметку документа. Если не указан DOCTYPE, то браузер будет добавлять «отсебятину», причём каждый браузер будет добавлять свою «отсебятину». В результате ни о какой кроссбраузерности не может и речи идти.


— Что такое entities?

Entities — это комбинации знака & и буквенного или цифрового кода после нее, предназначенные для замещения символов, которые не могут встречаться в «чистом» виде в HTML-тексте, например, символа «<».


— Какие магические методы знаешь? Что это вообще такое?

Это методы, зарезервированные в php, которые начинаются с двойного подчеркивания “__”.

Список всех магических методов:

  • __construct
  • __destruct
  • __call
  • __callStatic
  • __get
  • __set
  • __isset
  • __unset
  • __sleep
  • __wakeup
  • __toString
  • __set_state
  • __clone

__construct и __destruct — самые популярные методы, которые реализуют базовые понятия объектно-ориентированного программирования: конструктор и деструктор;

__call, __callStatic, __get и __set – методы, связанные с перегрузкой обращений как к свойствам, так
и к методам. Методы __get() и __set() вызываются при установке и получении значения свойства,
а методы __call() и __callStatic — при вызове метода. Стоит заметить, что эти магические функции
будут вызываться только и исключительно в том случае, если запрошенные метод или свойство
не существуют;

__isset — метод, срабатывающий при вызове функций empty() или isset() на несуществующем
или недоступном свойстве класса;

__unset — срабатывает при вызове функции unset() на несуществующем или недоступном свойстве класса;

__sleep и __wakeup – методы, которые вызываются только из функций serialize и unserialize со-
ответственно. Метод __sleep будет вызван сразу при применении к объекту функции serialize, а
метод __wakeup – при применении unserialize. В настоящий момент методы применяются для сохранения текущего состояния системы с последующим восстановлением данного состояния
(например, коннект к базе);

__toString – метод, с помощью которого можно обращаться к классу как к строке (например, с
помощью print или echo);

__set_state – метод, который вызывается для классов, экспортирующих значения свойств функ-
цией var_export();

__clone – вызывается при клонировании объекта (введен для использования из-за того, что объ-
екты в php5 и выше передаются по ссылке);

__invoke – вызывается при попытке использовать объект в качестве функции.

Тарас Сереванн, эксперт в области IT магии