Вопросы с собеседований и экзаменов по PHP

Вопросы и задачи с собеседований и экзаменов по PHP

перейти к содержанию задачника

  1. Создать скрипт, который в папке /datafiles найдет все файлы, имена которых состоят из цифр и букв латинского алфавита, имеют расширение ixt и выведет на экран имена этих файлов, упорядоченных по имени.Задание должно быть выполнено с использованием регулярных выражений.
    Весь код должен быть прокомментирован в стиле PHPDocumentor'а.
  2. Чему будет равен $x после выполнения выражения $x = 3 + "15%" + "$25"?
  3. Параллельные вычисления (реальное тестовое задание от www.interesnee.ru)
    Суть задачи: Требуется написать класс (семейство классов), позволяющий реализовывать параллельные вычисления на РНР.Объяснение сути задачи:
    С помощью данного класса или системы классов становится возможным запускать php скрипты или их части в отдельных процессах. Причём взаимодествие между процессами осуществляется также посредством разработанных классов. При этом под процессом понимается каждый запущеный экземпляр php скрипта.Обязательные требования к скрипту:

    • Весь код должен быть написан в OOП стиле, т.е. с использованием классов, интерфейсов, исключений и т.д.
    • Весь код должен быть прокомментирован в стиле PHPDocumentor'a.
    • Скрипт должен функционировать как в Windows так и в Unix системах.
    • Должна быть возможность распараллеливать не только скрипт целиком, но и конкретную функцию или метод класса.
    • Скрипт запускающий параллельные процессы должен иметь возможность общаться с ними в обоих направлениях. А именно: отправлять данные в дочерние процессы в любое время, получать данные с любого из дочерних процессов в любое время, определять статус процесса (работает, не работает). Дочерние скрипты также могут отправлять данные в порождающий процесс в произвольное время.

    Тестовый пример:
    Испытать ваш класс (классы) для распараллеливания предлагается на следующем примере: вычисление числа pi с заданной точностью методом монте карло (см. википедию). Порождающий скрипт запускает несколько дочерних процессов (количество процессов должно быть параметром конфига), каждый из которых начинает вычислять число pi методом монте карло. При этом при запуске параллельного процесса ему должно быть передано количество итераций вычислений, определяемое случайным образом. Порождающий скрипт через неравные промежутки времени (определяемые так же случайно) должен собирать информацию со всех параллельных процессов и выдавать совокупный результат (значение числа pi) в браузер с указанием времени прошедшей с момента запуска главного скрипта.
    Как будет оцениваться ваш тест:

    • Исполняемость и соответствие логики работы скрипта заданию. Если ваш скрипт не реализует распараллеливание процессов, или, в принципе, не может быть исполнен из-за каких-то синтаксических проблем в коде (код либо недописан, либо имеет ошибки синтаксиса), то тестовое задание будет считаться проваленным.
    • Наличие выполненых обязательных требований к скрипту. Если какое-то из обязательных требований не будет выполнено, то это ещё не значит что вы не пройдёте тест. Однако чем больше обязательных требований будет реализовано тем выше вероятность успеха.
  4. $x = 1;
    if ($x == '1') { echo 'a'; }
    if ($x == true) { echo 'b'; }
    if((bool)$x === true){ echo 'e'; }
    if ($x === true) {  echo 'c'; }
    if((int)$x === true){ echo 'd'; }
    Какая строчка выведется при исполнении скрипта?
    Почему исполняется или не исполняется каждое из условий?
  5. Напиши письмо с решением тестового задания на Python + PHP (если не знаешь, можно выучить по докам):
    на вход шаблон аля "ws[10-14].yandex.net", на выход массив ["ws10.yandex.net", ..., "ws14.yandex.net"]И опиши свою стратегию решения насущной задачи: как фильтровать левые заявки на кредиты до получки. Неизвестные моменты ищутся в гугле.И напиши как ты пришел в профессию.
  6. Напишите на PHP функцию разбора SMS с кодом подтверждения от сервиса Яндекс.Деньги. Функция должна принимать текстовую строку и возвращать код подтверждения, сумму и кошелек. Речь идет о реальном сервисе Яндекс.Деньги. Если у вас нет кошелька, то воспользуйтесь эмулятором, генерирующим идентичные сообщения. Учтите, что порядок полей, пунктуация и слова со временем могут быть изменены.
  7. Напишите функцию на JavaScript с использованием jQuery, которая принимает URL, делает GET-запрос на сервер и отображает ответ (или ошибку) в модальном окне Bootstrap. Окно должно открываться при вызове функции без какой-либо задержки. Ответ содержит произвольный HTML-код, не требующий дополнительной обработки.
  8. Что нужно сделать:- Выполнить тестовое задание: “Написать скрипт, который можно запустить из командной строки, принимающий последовательность символов, разделенных запятой, и определяющий является ли введенная последовательность прогрессией. Решение выложить в публичный репозиторий”
  9. Тестовое задание:Сделать форму для ввода числа и отправки ее на сервер, где PHP скрипт проверяет, входит ли данное число в диапазон от 1000 до 2000 и затем возвращает его пользователю в таком виде (число, разбитое на разряды + расшифровка словами):
    "1 853 - две тысячи восемьсот пятьдесят три - входит в диапазон"
    "4 654 187 - четыре миллиона шестьсот пятьдесят четыре тысячи сто восемьдесят семь - не входит в диапазон"
    Все введенные данные сохранять в MySQL в виде отдельных записей. При каждом обновлении формы выводить на странице количество вошедших и не вошедших в диапазон чисел за все время работы формы.Результат прислать в виде одного PHP-файла и файла-дампа таблицы, с которой работает скрипт.По результатам реализации будет принято решение. Желаем удачи и ждем Вас в нашей команде!
    Спасибо.
  10. Тестовое задание. 1) Сделать форму обратной связи.
    На странице должны быть показаны все оставленные отзывы, под ними форма: Имя, E-mail, текст сообщения, кнопки "Предварительный просмотр" и "Отправить".
    Отзывы можно сортировать по имени автора, e-mail и дате добавления (по умолчанию - по дате, последние наверху).Также должна быть валидация.
    2) Предварительный просмотр должен работать без перезагрузки страницы.
    3) Сделать вход для администратора (логин "admin", пароль "123"). Администратор должен иметь возможность редактировать отзыв. Измененные отзывы в общем списке выводятся с пометкой "изменен администратором".
    4) К отзыву можно прикрепить картинку.
    Картинка должна быть не более 320х240 пикселей, при попытке залить изображение большего размера, картинка должна быть пропорционально уменьшена до заданных размеров. Допустимые форматы: JPG, GIF, PNG.
    5) У администратора должна быть возможность модерирования.
    Т.е. на странице администратора показаны отзывы с миниатюрами картинок и их статусы (принят/отклонен).
    Отзыв становится видимым для всех только после принятия админом. Отклоненные отзывы остаются в базе, но не показываются обычным пользователям. Изменение картинки администратором не требуется.В приложении нужно с помощью чистого PHP реализовать модель MVC (PHP-фреймворки использовать нельзя).
    Верстка на bootstrap. Помните, что аккуратность - это один из главных критериев оценки тестового.Приложение нужно развернуть на любом бесплатном хостинге, чтобы можно было посмотреть его в действии.
  11. Тестовое задание с freelance.ru (видимо, заказчик устраивался на работу junior-ом)
    1. Создать простое API по управлению пользователями (обращение к API через POST и GET запросы)

    Типы пользователей:

    - Суперадмин (может добавлять/изменять/удалять любой тип пользователей кроме супер администраторов) задан в системе по умолчанию

    - Администратор (может добавлять/изменять/удалять простых пользователей)

    - Пользователь (может просматривать информацию о себе) (Имя, Возраст)

     

    Авторизация для работы с API на своё усмотрение.

    Информация должна храниться в MySql

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

    PHP 5.6 и выше

     

    1. Есть таблица tree, содержащая записи следующего вида:

     

    node_id parent_id title
    1 null Node 1
    2 1 Node 2
    3 2 Node 3
    4 2 Node 4
    5 null Node 5

     

    1. Напишите скрипт, который построит древовидную иерархию в виде многомерного массива.

     

    Имеется таблица ticks вида:

     

    id symbol date value
    1 EURUSD 2014-01-10 1.34
    2 GBPUSD 2014-01-10 1.67
    50 EURUSD 2014-01-09 1.31
    51 NZDUSD 2014-01-09 0.83

     

    В таблице содержатся данные со значениями валютных пар в разные даты. Набор валютных пар ограничен – предположим, что их около 50 штук. Данные в таблице обновляются каждый день, но может случиться так, что  в какой-то из дней нет данных по некоторым валютным парам. Необходимо написать запрос, который получит самые «свежие» значения по каждой валютной паре. Если за текущий день значения по какой-то из валютных пар отсутствует, то необходимо выбрать предыдущее значение, и т.д. В результате должна получиться таблица вида:

     

    EURUSD 1.34
    GBPUSD 1.67
    NZDUSD 0.83

     

  12. Тестовое задания на WordPress для junior Поднять чистый WP.
    Установить плагин "SimpleFields" (https://wordpress.org/plugins/simple-fields/) (документация: simple-fields.com/documentation/).
    Написать собственный плагин, который инициализирует новый post-type "Объект недвижимости" и taxonomy "Район", где объект недвижимости будет зданием (в здании может быть множество квартир или помещений).
    Через "SimpleFields" создать набор полей для объектов недвижимости: "название дома (input)", "координаты местонахождения (input)", "количество этажей (1-20, list)", "тип строения (панель/кирпич/пеноблок, radio)", "изображение", мульти-блок-полей "помещение" где будут такие поля как "площадь (input)", "кол.комнат (1-10, radio)", "балкон (да/нет, radio)", "санузел (да/нет, radio)", "изображение".
    В single-page здания должны выводиться все эти заполненные аттрибуты и прочее.
    В плагине добавить инициализацию shortcode и widget, который при вставке на фронте должен отобразить блок фильтра (со всем полями) по объектам недвижимости и их помещений. При операции поиска ниже блока фильтра средствами Ajax должен выводиться список из 10 найденных позиций с постраничным выводом. Каждая позиция может быть как зданием или помещением с изображением, заголовком и коротким описанием, с сcылкой перехода на страницу здания.
  13. Разработать мини-сайт на современном фреймворке под PHP7. Верстка – Twitter Bootstrap. Фронтенд: главная (html-страница), лента новостей, просмотр одной новости, галерея картинок с просмотром через lightbox. Бэкэнд: авторизация (не htaccess), редактор текста на главной (WYSIWYG -редактор), редактор статей (заголовок, картинка, текст), реактор галереи (добавление и удаление изображений, автокроп изображений под 800х600 с сохранением соотношения сторон).Будет оцениваться: стиль кода, комментирование, алгоритмы, понимание фреймворка. Дизайн оцениваться не будет, однако отвращения он тоже вызывать не должен. После первой сдачи будут даны комментарии и вопросы, ответы на которые также будут оценены.
  14. Тестовое задание (php+mysql)
    • Создать структуру базы данных для хранения иерархического списка.
    • Произвольный текст на русском языке (например, с сайта https://yandex.ru/referats/) разбить на слова.
    • Создать из этих слов дерево с тремя уровнями вложенности: первая буква в слове – первый уровень, вторая буква в слове – второй уровень, третья буква в слове – третий уровень, все слово – четвертый уровень и записать иерархию в базу.
    • Вывести все дерево на странице.

     

  15. С помощью PHP и MySQL (можно использовать фреймворк или CMS):
  • Форма для входа и проверки логина и пароля.
  • После проверки пароля предоставить интерфейс для загрузки картинок на сервер с возможностью удаления файлов.