Тестовый задания и их решения (PHP)

2015-10-17
4.3 / 5 (12 голосов)

Тестовые задания, какие они должны быть? Показывают ли они реальные знания программиста? Сколько времени можно потратить на тестовое задание не в ущерб другим делам?

Такие и еще много похожих вопросов задаёт себе как программист, так и работодатель. При прохождении собеседований, почти на каждом втором предлагают выполнить тестовое задание. Но, одно дело, когда ты ничем не занят и можешь выделить время на его реализацию, другое дело, когда у тебя куча работы и тебе предлагают "небольшое" тестовое занятие, которое по объему тянет дня на 3 минимум. Моё мнение, что тестовые задания не должны занимать более 5 часов времени на выполнение, а также выдавать их стоит только на вакансию джуниора.

Однако в тестовых заданиях есть и положительные стороны, при реализации возможно увидеть свои недочеты, либо просто интересные моменты, на которые ты раньше не обращал внимание или вовсе не использовал. Лично я за свои 3 года активного веб-программирования проходил более 20 собеседований и накопилось не мало тестовых задач, сегодня и в будущем буду их складывать в данный материал. Внутри вы найдете задания, а также мои ответы на них. Задания могут быть очень старыми и сейчас бы я сделал совсем по другому, но пусть будет как было, дабы став в будущем великим гуру, можно было посмотреть на свои ответы. Также возможно они пригодятся кому-то еще.

Данный материал будет постоянно дополняться...



2017

Хорошие примеры вопросов с ответами от компании toptal

https://www.toptal.com/php/interview-questions

2016

Шпаргалка по SOLID

  • Принцип единственной ответственности (Single responsibility)
    «На каждый объект должна быть возложена одна единственная обязанность»
    Для этого проверяем, сколько у нас есть причин для изменения класса — если больше одной, то следует разбить данный класс.
  • Принцип открытости/закрытости (Open-closed)
    «Программные сущности должны быть открыты для расширения, но закрыты для модификации»
    Для этого представляем наш класс как «чёрный ящик» и смотрим, можем ли в таком случае изменить его поведение.
  • Принцип подстановки Барбары Лисков (Liskov substitution)
    «Объекты в программе могут быть заменены их наследниками без изменения свойств программы»
    Для этого проверяем, не усилили ли мы предусловия и не ослабили ли постусловия. Если это произошло — то принцип не соблюдается
  • Принцип разделения интерфейса (Interface segregation)
    «Много специализированных интерфейсов лучше, чем один универсальный»
    Проверяем, насколько много интерфейс содержит методов и насколько разные функции накладываются на эти методы, и если необходимо — разбиваем интерфейсы.
  • Принцип инверсии зависимостей (Dependency Invertion)
    «Зависимости должны строится относительно абстракций, а не деталей»
    Проверяем, зависят ли классы от каких-то других классов(непосредственно инстанцируют объекты других классов и т.д) и если эта зависимость имеет место, заменяем на зависимость от абстракции.

Мои парсеры

На новой работе первоначально пришлось делать много парсеров, которые бы могли парсить категории и товары, складывая это все добро в XML файл. Итоговый файл формата YML (Yandex Market Language)

github


Тестовое задание - разработка проекта для сжатия урлов (NixSolution)

В январе 2016 года проходил собеседование в Харьковскую компанию - NixSolution. Сделал для них тестовое задание, на yii2 фреймворке, прошел собеседование, а фитбек так и не получил, вот такие они топовые компании :) В итоге работаю в другой компании и пфу-пфу пока не жалею.

Решить поставленную задачу используя:
● PHP 5.6+
● ООП
● PSR­2 (http://www.php­fig.org/psr/psr­2/) и PSR­4 (http://www.php­fig.org/psr/psr­4/)
● Apache 2.4 / Nginx
● PDO для работы с MySQL Будет хорошим плюсом​, если будет использовано:
● https://getcomposer.org/ для автолоада классов и подключения сторонних библиотек, используемых для решения задачи (написанных вами в том числе)
● http://getbootstrap.com/ для стилизации HTML страниц Решение прислать ввиде ссылки на код проекта на https://github.com/ В репозитории обязан быть файл README.md, содержащий инструкцию как установить проект и просмотреть функциональность.
Покрыть код unit­тестами (https://phpunit.de). Юнит тесты добавить в проект с помощью composer https://getcomposer.org/
“Минификатор URL” Пользователю предотавляется поле для ввода URL, по нажатию кнопки “Уменьшить” пользователю предоставляется короткая ссылка с текущим доменом сайта (вида http:///aBcD). При переходе по уменьшеной ссылке юзер будет перенаправлен на исходную страницу. Пользователь должен иметь возможность создать свою короткую ссылку. Пользователь должен иметь возможность создавать ссылки с ограниченным сроком жизни.
Как бонус​: Пользователь, создающий ссылку также получает ссылку на статистику переходов. В статистике должна отображаться география переходов, данные из юзер агентов переходящих (можно использовать google charts).

github | demo


2015

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

Демо функции и парсера / Скачать примера кода


2014

Как-то пришла вакансия от достаточно известного украинского банка. Решил пройти собеседование и посмотреть что они предложат. Как всегда необходимо выполнить тестовое задание. Могу сказать, что работают там отличные ребята, задания у них интересные и по времени не занимают много времени, но вот зарплата, к сожалению не сильно высокая, поэтому мы с ними распрощались. Задача была сделать веб-страницу с редактором для ручного набора. Код решения вы можете посмотреть на странице -> пример мини FAQ с вопросом и ответом.

Демо мини FAQ (вопрос-ответ)


2013

Одно из самых стандартных тестовых задач в 2013 году и даже сейчас - это гостевая книга. Код решения вы можете посмотреть на странице ->  пример гостевой книги

Демо гостевой книги 


Прочитано 3789 раз Последнее изменение 2017-02-11

1 Комментарий

  • Влад
    Влад 2015-10-23

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

Оставить комментарий

Все поля отмеченные (*) обязательны для заполнения