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

Содержание
  1. Блог Максима Федорова
  2. Тестовые задания Yii2
  3. Тестовые задания на Symfony
  4. Тестовые задания на фреймворках
  5. Тестовые задания строго без фреймворка
  6. Куда без блокчейна в 2017 году? 🙂
  7. Какое тестовое задание junior php дают на собеседовании?
  8. Тестовое задание программисту php
  9. About
  10. Тестовое задание для PHP разработчика на испытательном сроке
  11. Аннотация
  12. Гостевая книга
  13. Гостевая книга. JavaScript и работа с файлами.
  14. Гостевая книга. Регулярные выражения.
  15. Гостевая книга. JavaScript и AJAX.
  16. Требования
  17. Собеседование php-developer (вопросы и ответы)
  18. Что нового в PHP 7.*
  19. Типы данных
  20. Type hinting + strict mode
  21. Строгое и нестрогое сравнение
  22. Работа с ссылками
  23. Copy-on-write
  24. Run time error handling
  25. Замыкания
  26. Функции по работе с массивами
  27. Функция list()
  28. Область видимости переменной
  29. Область видимости свойства/метода/константы класса
  30. Final классы и методы
  31. Позднее статическое связывание
  32. Магические методы
  33. Динамические переменные
  34. Генераторы
  35. Reflection API
  36. Autoloader
  37. APC/APCu
  38. OPcache
  39. PSR standards
  40. Composer
  41. XDebug
  42. Rest API
  43. Тесты
  44. Инкапсуляция/наследование/полиморфизм
  45. Абстрактные классы/методы
  46. Интерфейсы
  47. Traits
  48. GRASP шаблоны
  49. Паттерны банды четырех
  50. SOLID
  51. Databases
  52. Docker
  53. HTTP и другие протоколы
  54. Авторизация и аутентификация

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

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

Тестовые задания 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.

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

5d9684bb20b27211678757

5cd9b49bc1e96349723412

8ee80272c5a94d9a87c0ada8c583ca38

5d5e65be5e08c985498222

5cd9b49bc1e96349723412

5d9684bb20b27211678757

7d597762828e4d9fa5c31d6fa34ef7d9

5d9684bb20b27211678757

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

7d597762828e4d9fa5c31d6fa34ef7d9

5cd9b49bc1e96349723412

5cd9b49bc1e96349723412

7d597762828e4d9fa5c31d6fa34ef7d9

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

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

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

4487d072f40f4f8e84854aea5794c990

5d5e65be5e08c985498222

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

5d5e65be5e08c985498222

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

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 разработчика на испытательном сроке

ac2b7145565db248459658ffa2a79e77

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

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

Данное тестовое задание скорей всего больше подходит для 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) и др.

Источник

Моя дача
Adblock
detector