- Блог Максима Федорова
- Тестовые задания Yii2
- Тестовые задания на Symfony
- Тестовые задания на фреймворках
- Тестовые задания строго без фреймворка
- Куда без блокчейна в 2017 году? 🙂
- Какое тестовое задание junior php дают на собеседовании?
- Тестовое задание программисту php
- About
- Тестовое задание для PHP разработчика на испытательном сроке
- Аннотация
- Гостевая книга
- Гостевая книга. JavaScript и работа с файлами.
- Гостевая книга. Регулярные выражения.
- Гостевая книга. JavaScript и AJAX.
- Требования
- Собеседование php-developer (вопросы и ответы)
- Что нового в PHP 7.*
- Типы данных
- Type hinting + strict mode
- Строгое и нестрогое сравнение
- Работа с ссылками
- Copy-on-write
- Run time error handling
- Замыкания
- Функции по работе с массивами
- Функция list()
- Область видимости переменной
- Область видимости свойства/метода/константы класса
- Final классы и методы
- Позднее статическое связывание
- Магические методы
- Динамические переменные
- Генераторы
- Reflection API
- Autoloader
- APC/APCu
- OPcache
- PSR standards
- Composer
- XDebug
- Rest API
- Тесты
- Инкапсуляция/наследование/полиморфизм
- Абстрактные классы/методы
- Интерфейсы
- Traits
- GRASP шаблоны
- Паттерны банды четырех
- SOLID
- Databases
- Docker
- HTTP и другие протоколы
- Авторизация и аутентификация
Блог Максима Федорова
Делюсь некоторыми тестовыми заданиям, с которыми столкнулся при поиске работы на джуниора.
Если вам недостаточно заданий — просто разошлите компаниям на ХедХантере письма с просьбой выслать тестовое задание.
Тестовые задания 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 | Настройка окружения | 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) и др.