Тестовое задание программисту php

Блог Максима Федорова

Делюсь некоторыми тестовыми заданиям, с которыми столкнулся при поиске работы на джуниора.
Если вам недостаточно заданий — просто разошлите компаниям на ХедХантере письма с просьбой выслать тестовое задание.

Тестовые задания Yii2

Создание REST API
Реализовать CRUD с регистрацией для авторов и книг. Подробнее

Парсер видео
Создать парсер видео с Youtube, Rutube, Vimeo — парсинг данных по ссылке или iframe и занесение их в БД. Подробнее

Агрегатор логов Apache
Собрать логи сервера и записать их в БД, также вывести с возможностью фильтрации. Подробнее

Тестовые задания на Symfony

Приложение для управления резюме
Приложение, в котором можно отследить эффективность каждого резюме и каждой версии резюме. Подробнее

Игра «Электрик»
Усложненная версия игры — переключение лампочек по клику с эффектом неожиданного погасания лампочки. Подробнее

Система пользователей для заказа запчастей
Реализовать раздел, в котором пользователи смогут создавать запросы на запчасти, а магазины, у которых есть запчасти, соответствующие запросам пользователей, смогут получать эти запросы. Подробнее

Тестовые задания на фреймворках

Форма обратной связи (Laravel)
Форма обратной связи с фиксацией заявок и возможностью их обработки менеджером. Подробнее

Парсер новостей из RSS изданий (CodeIgniter)
Нужно брать статьи из 5 источников RSS и сохранять их в БД. Подробнее

Минисправочник (задание в 2ГИС)
Реализовать справочник с адресами, компаниями и зданиями. Нужно реализовать REST и возможность выборки по радиусу/квадрату от заданного положения. Подробнее

Тестовые задания строго без фреймворка

Тестовое задание для web-разработчика (дискретка)
Реализовать структуру БД и класс(-ы) для работы с ориентированным нецикличным графом. Подробнее

Расписание поездок курьеров в регионы
Вывод занятых и свободных курьеров с возможностью фильтрации и данными по поездкам. Подробнее

Создание REST без фреймворков под высокие нагрузки
Новостной каталог с рубриками, авторами и новостями для 100 тыс записей. Реализация REST. Подробнее

Менеджер задач
Обычный менеджер задач. Подробнее

Сократитель ссылок без фреймворка
Генерация короткого url с записью в БД и проверкой уникальности. Должна работать переадресация. Подробнее

Напишите REST API для генерации рандомного числа
Каждой генерации присваивать уникальный id по которому можно получить результат генерации. Должны быть доступны 2 публичных API метода generate() и retrieve(id)

Куда без блокчейна в 2017 году? 🙂

Список дел на Solidity
Реализовать, используя язык Solidity смарт-контракт для добавления записей. Подробнее

На Хекслете опубликовали список тестовых заданий, но для разных языков.

Источник

Какое тестовое задание junior php дают на собеседовании?

В интернете полно информации про устное собеседование на junior php.

А что по поводу тестового задания?

Антон Клочков, оффтоп конечно, но расскажите пожалуйста всё что связано с IQ тестом, если не сложно, можно в двух словах: что вам сказали когда давали тест, аргументировали ли чем-нибудь, что он вообще из себя представляет.

Тестовое в разных конторах разное. Для джуна это обычно: Таск-менеджер или примитивный блог, с необходимыми заказчику технологиями и, чаще с ограниченным временем. Могут попросить сделать что-либо на чистом PHP, например ваше представление модели MVC.

В общем задача включающая в себя решение базовых принципов львиной доли сайтов на рынке: регистрация, авторизация. Работа с формой (публикация новостей, создание таски/задачи). Работа с БД, в частности с JOIN, тут либо комментарии к постам, либо теги у задачи.

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

Тестовое в разных конторах разное.

Вложенность тегов не допускается.
Описания может и не быть
Обезателен закрвающий тег

2) Дан текст в который включены ключи raz: dva: tri:
текст может располагаться как перед ключами так и после

Источник

Тестовое задание программисту php

Тестовое задание для кандидатов на вакансию Backend (PHP) разработчика

МАГ Девелопмент — это компания, где создаются инновационные сервисы на стыке информационных технологий, транспортной логистики и торговли.

Наши вакансии на сайте http://magdv.com.

Необходимо реализовать систему для редактирования любого json-документа методом PATCH. Клиент системы должен иметь возможность создать пустой черновик документа. Пока документ находится в статусе черновик, его можно редактировать сколько угодно раз. Черновик документа можно опубликовать. После публикации документ больше редактировать нельзя.

Патчинг проводится согласно RFC-7396.

1. Клиент делает запрос на создание документа

2. Клиент редактирует документ первый раз

3. Клиент редактирует документ

4. Клиент публикует документ

5. Клиент получает запись в списке

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

Написать unit/api тесты

Необходимо описать минимальный набор тестов, для того чтобы убедиться что ваше приложение работоспособно. Желательно использовать php-unit или codeception.

Читайте также:  Что такое энтомология кратко

Составить план работ/модулей которые надо реализовать. Дать оценку времени, которое будет затрачено на каждый из пунктов. Оформить каждый пункт как отдельный коммит. По окончанию реализации задачи записать сколько реально времени было потрачено.

В итоге получить примерно такую таблицу:

# Задача Оценка Затрачено Комментарий
1 Настройка окружения 40м Нашел хорошую инструкцию
2 Установка фрэймворка 20м 30м Забыл установить composer
3 . . . .

Завернуть ваше приложение в Docker контейнер. Написать скрипт разворачивания приложения одной командой.

Самый удобный способ для этого, конечно, docker-compose.

Реализовать патчинг самостоятельно

В вашем приложении вы могли использовать готовый модуль для патча. Если это так, то попробуйте реализовать алгоритм патчинга самостоятельно.

Реализовать авторизацию без пароля POST /api/v1/login Запрос:

Аутентификация должна проходить по заголовку в запросе. Например:

Учесть конкурентные запросы

About

Тестовые задания для кандидатов PHP Backend MagDevelopment

Источник

Тестовое задание для PHP разработчика на испытательном сроке

После прохождения собеседования (ох и бурное обсуждение получилось), для разработчика наступает испытательный срок. Это один из самых тяжелых этапов для человека на новой работе — идет адаптации с новым коллективом, нескончаемый поток новых знаний, которые с трудом успеваешь усваивать, да еще и тестовое задания, и оно не из простых…

Не буду ходить вокруг да около, а напишу какое оно есть, и надеюсь на Ваши комментарии:

Данное тестовое задание скорей всего больше подходит для junior разработчика, чем для матерого волка seniorа.

Аннотация

Гостевая книга

Гостевая книга. JavaScript и работа с файлами.

К базовой функциональности, следует добавить следующие возможности:

Гостевая книга. Регулярные выражения.

Гостевая книга. JavaScript и AJAX.

Требования

P.S. На картинке изображен двигатель Стирлинга, wikipedia частенько дает пищу для ума.

Upd: очень правильный комментарий появился на моём блоге:

народ, вы видимо не понимаете, на кого это задание рассчитано. Человек с опытом ЕСТЕСТВЕННО не будет его делать по двум причинам: а) не захочет тратить время и б) ему его не дадут.

но реалии таковы, что это часто-густо вообще первое более-менее объёмное задание соискателя на должность junior php developer.

поэтому 80 часов даётся не для того, чтобы он это задание просто сделал, а чтобы привёл реальность (свои знание) в соответствие с галочками в своём резюме напротив php, html, css, js, ajax, mysql.

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

собственно с этоим задание справляется.

а кандидаты, которым есть что показать, естественно идут сразу в проекты.

Источник

Собеседование php-developer (вопросы и ответы)

Так уж получилось, что в этом году я прошел ряд собеседований на позицию PHP разработчика, чего я не делал уже несколько лет. Будучи человеком ленивым практичным, перед собеседованием я попытался найти сборники вопросов-ответов, но все найденное было довольно старым, поэтому я решил сам подготовить список вопросов, которые встречал.

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

PHP

Что нового в PHP 7.*

Эх, помню времена когда рассказывал в чем отличие между 4 и 5 версиями, в глаза никогда не видев 4-ю, старые традиции нужно соблюдать, вопрос встречается почти на всех собеседованиях, и хоть никто не ожидает, что вы вспомните дословно в какой версии какие изменения произошли, в целом эту информацию стоит знать:

Типы данных

Хотя PHP это динамический язык, все же все данные в нем имеют четкие типы:
Скалярные типы:

Type hinting + strict mode

Как логичное продолжение темы типов и строгой типизации, которая пришла вместе с php 7.*, нужно знать о разнице между строгой и нестрогой типизацией, подробности в документации.

Строгое и нестрогое сравнение

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

Работа с ссылками

Ссылки в PHP — это, грубо говоря, способ получить доступ к одной и той же переменной (области памяти) под разными именами.

Основные операции которые можно совершать с ссылками:

Это было верно до php5, но сейчас передается только идентификатор объекта (документация).
Если вкратце, если вы создали объект, и передали его в функцию, внутри которой вы сделали
это не значит что оригинальный объект тоже обнулится, вы все так же можете с ним работать. А вот если вы явно передали объект по ссылке — то это действие “обнулит” и оригинальный объект.

Copy-on-write

Каждый раз передавая переменную в функцию её значение (теоретически) должно быть скопировано. Это может не быть проблемой для данных типа integer или float, но представьте, что вы передаете в функцию массив, содержащий десять миллионов значений. Для того чтобы избежать этого в PHP используется парадигма копирования-при-записи (copy-on-write). Так, на самом деле, при передаче массива его копирование не происходит до того момента, пока вы не захотите изменить что либо в этом массиве. Статья с более детальным объяснением.

Run time error handling

В 7-й версии php произошли ряд изменений которые касаются иерархии ошибок (больше информации по иерархии), в остальном ожидается что соискатель будет знать как отлавливать исключения, или даже сможет написать свой собственный error_handler.

Замыкания

Они же анонимные функции, наиболее полезны в качестве значений callback-параметров, документация. Есть хорошая, хотя и немного старая статья о работе с замыканиями на Хабре.

Функции по работе с массивами

Часто просят назвать все функции по работе с массивами которые вы помните на память. И хотя, по моему мнению, этот вопрос чуть более чем бессмысленный, перечень функций можно повторить по документации.

Функция list()

Благодаря изменениям в PHP 7.1 функцией стало пользоваться удобнее, как следствие используют ее чаще, всю информацию можно найти в документации.

Область видимости переменной

В большинстве случаев, все переменные имеют только одну область видимости, исключение составляют глобальные/суперглобальные переменные которые, как ясно из названия, доступны везде, а также статические/константы.

Область видимости свойства/метода/константы класса

Определяется при помощи ключевых слов public (видно всем), protected (доступен только текущему классу или его наследникам) или private (доступен только текущему классу), и может применяться как для свойств/метода, так начиная и с PHP 7.1 для констант класса. Подробнее в документации.

Final классы и методы

Разместив ключевое слово final перед объявлениями методов класса, можно предотвратить их переопределение в дочерних классах, а в случае объявления самого класса как final — его невозможно будет унаследовать. Такие классы и методы призваны защитить чувствительный код от изменений, а сам код становится проще поддерживать.
Подробнее в документации.

Позднее статическое связывание

Выражается в разнице между вызовом self:: и static. «Позднее связывание» означает что static:: будет вычисляться в ходе исполнения и может быть переопределен в классах — наследниках. Подробнее в документации.

Магические методы

В PHP без магии совсем никуда, поэтому у нас есть методы которые позволяют реализовать дополнительный функционал объекту, переопределить стандартное поведение объекта (к примеру __serialize()/__unserialize() ), или же поведение объекта в нетипичных для него ситуациях (__toString()) и другие.
Документация, и хорошая, хоть и немного устаревшая статья на хабре.

Динамические переменные

Вы можете передать имя одной переменной в другую, а затем использовать эту переменную “динамически”.

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

Генераторы

Генераторы (ключевое слово yield) создают простые итераторы позволяя экономить память в ситуациях, когда вам необходимо перебрать большой объем данных. Их может быть немного сложно понять, ровно до того момента как вы напишите свой генератор.

Описание в документации, и есть довольно старая (однако с того момента синтаксис генераторов не изменился) и хорошая статья на хабре.

Reflection API

Кратко говоря, это способность взглянуть внутрь своего (или чужого кода), узнать какие у класса есть переменные, методы, константы, сделать их при желании публичными. Данная способность активно используется фреймворками (например в симфони для автогенерации dependency injection) и библиотеками. Описание в документации и разумеется статья на хабре.

Autoloader

Обычно, на проектах очень редко необходимо самому реализовать автозагрузку классов, однако для компаний которые все решения пишут самостоятельно (например большие корпорации, которые не хотят работать с открытыми кодом), или каких то особенных проектов это актуально. К тому же может быть полезно понимать как это работает.

Или Standard PHP Library — набор классов (структуры данных, итераторы, исключения, классы для обработки файлов), интерфейсов и функций для решения стандартных задач. Как правило, знание наизусть библиотеки не требуется, но понимать из чего она состоит стоит хотя бы для личного развития. Подробнее в документации — www.php.net/manual/ru/book.spl.php

APC/APCu

Alternative PHP cache (APC) или альтернативный кеш без опкода (APCu) — бесплатный кеш с открытым исходным кодом, предназначенный для кэширования и оптимизации промежуточного кода PHP. В основном используется для сохранения вычислений между запросами. Документация:

OPcache

Улучшает производительность PHP путём сохранения скомпилированного байт-кода скриптов в разделяемой памяти, тем самым избавляя PHP от необходимости загружать и анализировать скрипты при каждом запросе. Официальная документация, а так же очень хорошая статья как это все работает на Хабре.

PSR standards

PHP Standards Recommendations — стандарты оформления кода, а также интерфейсы для стандартных задач. Используются данные стандарты во всех (известных мне) фреймворках, и облегчают взаимодействия между разными библиотеками. Официальная документация а также хорошая статья на Хабре.

Composer

Менеджер зависимостей, а также инструмент реализующий автозагрузку кода библиотек и самого приложение. Может помочь в оптимизации и ускорении приложения для продакшена.

XDebug

Большинство разработчиков использует это расширения для облегчения работы с кодом или же его оптимизации, основные знания здесь — как его настроить и запустить, с этим поможет следующая статья blog.denisbondar.com/post/phpstorm_docker_xdebug.

Rest API

REpresentational State Transfer — архитектурный подход который позволяет организовать взаимодействие между приложениями используя все возможности HTTP. Хорошая статья на эту тему, а также различия REST и SOAP.
В контексте API нужно понимать основные форматы обмена данными, чаще всего это XML и JSON.

Тесты

В основе всех unit тестов лежит PHPUnit (насколько мне известно), и на сегодняшний день, уметь и знать как писать тесты является обязательной частью разработки. Многие фреймворки (тот же Symfony) предлагают свои обертки и решения для тестирования. Вот хорошая статья о лучших инструментах для тестирования.

Инкапсуляция/наследование/полиморфизм

Абстрактные классы/методы

Интерфейсы

Интерфейс, в отличие от абстрактного класса, не может содержать поля и методы, имеющие реализацию – он описывает только сигнатуры метода, которые должны реализовать его наследники. В отличие от того же абстрактного класса, класс может реализовывать одновременно множество интерфейсов.

Официальная документация, и хорошая статья на хабре.

Traits

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

Так как каждый класс может реализовать множество трейтов, могут возникать конфликты когда один и тот же метод реализован в разных трейтах и/или самом классе. Подробней о трейтах в документации.

GRASP шаблоны

General Responsibility Assignment Software Patterns — шаблоны проектирования для решения общих задач. В отличие от паттернов из Банды Четырех, GRAPS шаблоны не имеют выраженной структуры, четкой области применения и конкретной решаемой проблемы, а лишь представляют собой обобщенные подходы/рекомендации/принципы, используемые при проектировании дизайна системы.

Паттерны банды четырех

Тема паттернов обширна, на нее написано уже много статей, и пытаться описать это в нескольких предложениях просто невозможно. Мне нравится этот ресурс — refactoring.guru/ru/design-patterns/catalog, но при необходимости вы можете воспользоваться этой ссылкой.

SOLID

Его спрашивают все, но спрашивают по-разному.

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

На Хабре можно найти десятки действительно хороших статей по этим принципам, поэтому я даю ссылку на medium.

Keep it simple, stupid — хороший принцип, вся суть которого уже содержится в названии, подробнее можно узнать здесь.

Don’t repeat yourself — принцип, описывающий что необходимо переиспользовать код везде, где это возможно. Подробнее здесь.

Databases

Хорошую статью на тему SQL баз данных можно найти здесь. Вопросы по NoSql базам в моем случае обычно встречаются на примере MongoDB. В случае с ElasticSearch обычно используются библиотеки-обертки, общую информацию можно почерпнуть из статьи на Хабре.

In memory хранилища (те что хранят значения в оперативной памяти) — memcached и/или redis (чаще всего), как правило работа с ними осуществляется через библиотеки-обертки, если вы хотите разобраться в вопросе подробнее, разумеется есть статья на Хабре.

Docker

Очень важный инструмент который использовался почти на всех проектах (в моем случае). И хотя зачастую настраивается он единожды за проект, основные понятия и принцип работы с ним нужно знать. Лично мне для собеседования нравится эта статья.

HTTP и другие протоколы

Разумеется, любой веб-разработчик должен знать и понимать как работают протоколы передачи данных (как минимум протоколы верхнего уровня). Тема большая и в несколько предложений ее сложно уместить, на Хабре есть обширная статья на эту тему.

Авторизация и аутентификация

Авторизация — предоставление прав на выполнение определённых действий, а также процесс проверки прав при попытке выполнения этих действий.

Аутентификация — процедура проверки подлинности, например проверка подлинности пользователя путем сравнения введённого им пароля.

Важно понимать разницу между авторизацией и аутентификацией, как они реализуются при использовании session и cookies, JSON Web Tokens (JWT) и др.

Источник

Читайте также:  за что отвечает указательный палец на ноге
Образовательный портал