- Блог Максима Федорова
- Тестовые задания Yii2
- Тестовые задания на Symfony
- Тестовые задания на фреймворках
- Тестовые задания строго без фреймворка
- Куда без блокчейна в 2017 году? 🙂
- H Вопросы и тестовые задания на позицию Junior PHP Developer в черновиках Recovery Mode
- Собеседование на PHP разработчика. Более 100 вопросов для Junior, Middle и Senior
- Junior
- Middle
- Тестовое задание для PHP разработчика на испытательном сроке
- Аннотация
- Гостевая книга
- Гостевая книга. JavaScript и работа с файлами.
- Гостевая книга. Регулярные выражения.
- Гостевая книга. JavaScript и AJAX.
- Требования
- Собеседования на должность 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 смарт-контракт для добавления записей. Подробнее
На Хекслете опубликовали список тестовых заданий, но для разных языков.
H Вопросы и тестовые задания на позицию Junior PHP Developer в черновиках Recovery Mode
Привет всем!
В последнее время побывал на многих собеседованиях, позиционируюсь я как Junior PHP Developer. До этого я нереально боялся всех собеседований, боялся завалить их, пытался готовиться к ним, гуглил примерно такого рода статьи, которую пишу сейчас (и находил не прямо так много информации). Здесь я хотел бы оставить список всех возможных вопросов, которые Вам могут задать на собеседовании с техническим специалистом, которые задавали мне в различных компаниях, а так же тестовые задания которые мне приходилось выполнять, чтобы добраться до технических собеседований. Помимо PHP сюда вставлю парочку вопросов по MySQL, конечно же. Поехали!
Ну вроде большинство всего такого я рассказал из вопросов, вас понятное дело могут погонять по особенностям вашего выбранного фреймворка, а теперь перейдем к тестовым:
Тестовое задание второй компании:
Создайте на *название вашего фреймворка* доску объявлений.
Должен присутствовать функционал регистрации и авторизации пользователей. После того как пользователь зарегистрировался и авторизовался он может заполнить информацию о себе и загрузить свое фото, добавить объявления с фото. К профилю пользователя можно добавлять текстовые комментарии и ставить оценку (рейтинг от 1 до 5). На главной странице сайта отображаются 20 последних добавленных объявлений и присутствует пагинация.
Готовый функционал нужно выложить на Git и прислать нам.
Тестовое задание третьей компании:
1. Создать справочник журналов, с возможностью CRUD. У каждого журнала должны быть:
1.1 Название. (Обязательное поле)
1.2 Короткое описание. (Необязательное поле)
1.3 Картинка. (jpg или png, не больше 2 Мб, должна сохраняться в отдельную папку и иметь уникальное имя файла)
1.4 Авторы (Обязательное поле, может быть несколько авторов у одного журнала, должна быть возможность выбирать из списка авторов, который создается отдельно).
1.5 Дата выпуска журнала.
2. Список авторов создается отдельно. Также должна быть возможность добавления, удаления и редактирования. У каждого автора должны быть:
2.1 Фамилия (Обязательное поле, не короче 3 символов)
2.2 Имя (Обязательное, не пустое)
2.3 Отчество (Необязательное)
3. На выходе получаем:
3.1 Просмотр отдельно страниц журналов и авторов.
3.2 На странице авторов:
3.2.1 Должна быть возможность увидеть список всех журналов определенного автора.
3.2.2 Сделать сортировку авторов по фамилии
3.3.3 Сделать сотрировку таблицы по дате выпуска журнала.
3.4 Работа с каждой отдельной страницей должна происходить без её перезагрузки с использованием jQuery (или Angularjs).
3.5 Сделать пагинацию по журналам и авторам
4. Рекомендуемое время выполнения задания — 4 часа.
Всем удачных подготовок и прохождения собеседований!
Собеседование на PHP разработчика. Более 100 вопросов для Junior, Middle и Senior
Собрал список вопросов, по которым можно подготовиться к собеседованию или которые можно спросить у дипломированного PHP-разработчика. Конечно, список, не является исчерпывающим. Больше вопросов с кодом в нашем телеграм-канале @phpquiz. Погнали по вопросам!
Junior
Основы
Какие основные операции с использованием ссылок?
Назовите простые типы данных, поддерживаемые в РНР?
Что такое инкремент и декремент, в чем разница между префиксным и постфиксная инкрементом и декрементом?
Что такое рекурсия?
В чем разница между =, == и ===?
Какие знаете принципы ООП?
Какая система типов используется в PHP? Опишите плюсы и минусы.
Чем отличаются ключевые слова: include и require, mysql_connect и mysql_pconnect?
Что такое абстрактный класс и чем он отличается от интерфейса?
Может ли абстрактный класс содержать частный метод?
Какие модификаторы видимости есть в РНР?
Какие магические методы вы знаете и как их применяют?
Что такое генераторы и как их использовать?
Что делает оператор yield?
Что такое traits? Альтернативное решение? Приведите пример.
Опишите поведение при использовании traits с одинаковыми именами полей и / или методов?
будут доступны частные методы trait в классе?
можно компоновать traits в trait?
Расскажите об обработке ошибок и исключения (try catch, finaly и throw).
Что такое type hinting, как работает, зачем нужен?
Что такое namespace и зачем они?
Сравнение значений переменных в РНР и подводные камни? Приведение типов. Что изменилось в PHP 8 в этом контексте?
Как работает session в РНР, где хранится, как инициализируется?
Cуперглобальные массивы. Какие знаете? Как использовали?
Сравните include vs required, include_once vs required_once.
Что означает сложность алгоритма?
Что такое замыкание в PHP? Приведите пример.
Какая разница между замыканием в PHP и JavaScript?
Что такое позднее связывание? Расскажите о поведении и применения static.
Расскажите о SPL-библиотеку (Reflection, autoload, структуры данных).
Расскажите о принципах SOLID.
Расскажите о шаблонах GRASP.
Расскажите о Dependency Injection: что такое DI-контейнеры? Какие есть варианты реализаций?
Что вам известно о MVC?
Что вам известно о шаблонах GoF?
Что вам известно о шаблонах, которые применяются в ORM?
Напишите / расскажите на PHP пример реализации паттерна Singleton.
Что такое Docker? Каков принцип его работы?
Что такое LAMP / NAMP?
Расскажите о regexp.
Расскажите о SSH-протокол.
Что нового появилось в PHP 8?
Какие версии PHP до сих пор поддерживаются?
В чем разница между GET и POST?
Какие еще HTTP-методы знаете?
Чем отличаются операторы BREAK и CONTINUE?
Есть ли разница между одинарными и двойными кавычками?
Что такое cookie и зачем они используются?
Что нельзя хранить в cookie и почему?
Какую среду разработки предпочитаете и почему?
Какой командой добавить изменения?
Какой командой зафиксировать изменения?
Какой командой отправить изменения в удаленный репозиторий?
Базы данных
Что такое транзакция?
Что такое нормализация?
Что такое денормализации? Для чего она нужна?
Какие типы связей в базе данных?
Что означает утверждение о том, что СУБД поддерживает контроль ссылочной целостности связей?
Если используемая вами СУБД не поддерживает каскадные удаления для поддержки ссылочной целостности связей, что можно сделать для достижения аналогичного результата?
Что такое первичный и внешний ключи?
Какие различия между первичным и уникальным ключами?
Какие типы JOIN и в чем различия?
Что такое курсоры в базах данных?
Что такое агрегатные функции SQL? Приведите несколько примеров.
Что такое миграции?
Расскажите о связи друг к другу, один ко многим, многие ко многим.
Зачем используют оператор группировки GROUP BY?
В чем разница между WHERE и HAVING? Приведите примеры.
В чем разница между операторами DISTINCT и GROUP BY?
Для чего нужны операторы UNION, INTERSECT, EXCEPT?
Опишите разницу типов данных DATETIME и TIMESTAMP.
Какие вы знаете двигатели таблиц и чем они отличаются?
Какие способы оптимизации производительности баз данных знаете?
Что такое партицирование, репликация и шардинг?
Чем отличаются SQL от NoSQL базы данных?
Какие бывают NoSQL базы данных?
Какие типы данных есть в MySQL?
Разница между LEFT JOIN, RIGHT JOIN, INNER JOIN?
Разница между JOIN и UNION?
Что такое индексы? Как они влияют на время выполнения SELECT, INSERT?
Что такое хранимые процедуры, функции и триггеры в MySQL? Для чего они? Приведите примеры использования.
Как организовать сохранность вложенных категорий в MySQL?
Практические задания
Спроектируйте базу данных для хранения информации о книгах и их авторов. Напишите запрос для выборки всех авторов и количества написанных ими книг.
Есть матрица 3 × 3. Посчитайте диагонали, только парные / нечетные числа в диагоналях.
Ваш приложение выдает 500 ошибку. Опишите последовательность поиска проблемы.
Напишите функцию, которая определяет, слово является палиндромом.
Какой результат выдаст такой код и почему: If (-1) print «True» else print «False»
Какой результат выдаст такой код и почему: var_dump (array_merge ([2 => ‘a’], [3 => ‘b’]));
Есть массив товаров в случайном порядке с указанием производителей. Напишите метод для его сортировки, чтобы максимальное количество первых товаров соответствовала такому критерию: каждый следующий товар должен производителя, отличного от предыдущего.
Есть массив Integer, напишите возможные способы, как увеличить каждый элемент на единицу (1).
Order
User
Напишите запрос для увеличения значения column1 на 1 для id = 2
Напишите цикл for так, чтобы аргумент цикла менялся в геометрической прогрессии.
Что выведут выражения:
print (!! «false»)
print (!! true)
print ((int) ‘125g7’)
print ((int) ‘x52’)
Результат выполнения функции? Как исправить результат?
in_array (1, [0, ‘0’, true])
Напишите класс с реализацией всех возможных способов строгой типизации данных с учетом возможностей PHP 8.
Middle
Основы
Как передаются переменные (по значению или по ссылке)?
Какие процессы происходят, когда пользователь вводит в браузере URL?
Что такое вариативная функция или spread-оператор?
Какие типы уязвимостей знаете? Как от них защищаться?
Что такое идемпотентность метода? Какие HTTP-методы являются идемпотентными для REST?
Что такое stateless?
SOAP vs REST. В чем разница?
Какие методы авторизации используют для построения API?
Что может содержать интерфейс?
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированный объект: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?
Что такое Mock? Где используют и зачем?
Опишите реализацию одного из шаблонов проектирования.
Как хранятся данные в redis / memcached?
Расскажите о целесообразности применения redis / memcached для кэширования. Какие плюсы и минусы?
Назовите различия между nginx и apache.
Что такое opcash? Как он работает?
Что такое JIT? Как он работает?
Зачем нужно ключевое слово final?
Что нового в РНР 7/8?
Что такое SOLID, DRY, KISS, YAGNI?
Назовите паттерны проектирования, с которыми приходилось работать.
Что такое простая фабрика?
Что такое Service Layer и где его следует применять?
Как устроен Singleton и почему его считают антипатерном?
Что такое идемпотентность?
Опишите жизненный цикл HTTP-запроса?
Что такое куча и стек?
Что такое рефлексия?
Что такое хэш-функция и где она используется?
Как применяются очереди в РНР?
Как в общих чертах работает opcache?
Чем отличаются модульные тесты от интеграционных?
Что такое трейты? Как применять на практике?
Как разрешить конфликты при использовании trait?
Как работает автозагрузки классов?
В чем разница между стеком и очередью?
Расскажите о Unit Tests (required), Functional Tests (optional). Моки и стаб в PHP.
Представим ситуацию, в которой нам нужно вызвать частный метод, как это сделать?
Опишите разницу между PHP-FPM и PHP на сокете.
Как бы вы реализовали загрузки больших отчетов с большим количеством данных (файлы от 1 гигабайта до N гигабайт).
Как бы вы импортировали 50-гигабайтный файл xml в базу данных?
Почему после PHP 5 идет сразу 7, куда делась 6?
Есть ли разница между self и this в PHP?
У нас есть важный PHP-файл, его надо запускать каждые 20 секунд, как бы вы это сделали?
Как расшифровать 644 в правах на файл в Linux?
В чем разница между merge и rebase?
Какой командой можно сделать ресет изменений, не потеряв их?
Что такое stash и зачем он нужен?
Базы данных
Какая разница между MyISAM i InnoDB? В каких случаях и лучше применять?
Как найти и оптимизировать «тяжелые» запросы?
Какие типы индексов?
Как хранить координаты точки на карте в БД?
Какие типы индексов бывают в RDBMS?
Какое свойство полей БД нужно учитывать при выборе типа индекса?
Когда следует использовать индексы, преимущества и недостатки?
Что такое план выполнения запроса и как его узнать?
В чем разница между типами данных CHAR и VARCHAR в SQL?
Каково назначение транзакций? Расскажите о принципе работы.
Назовите 3-4 нормальные формы реляционных БД.
Каково назначение репликации? Какие типы связей и в чем разница между ними?
Что такое индексация? Какие типы индексов? Какой смысл их использовать?
Что такое полнотекстовый поиск в MySQL? Как он реализуется?
Что такое cursor в MySQL-процедурах?
Расскажите о RabbitMQ или Gearman.
Что знаете о Solr / ElasticSearch?
Что такое deadlock MySQL?
Влияет ли порядок JOIN на план выполнения MySQL-запроса?
Практические задания
Вам нужно спарсить продукты и их цены с интернет-магазина. С помощью чего будете это делать и какие основные нюансы нужно учесть?
Для сайта пользователей необходимо сделать механизм добавления и отображения аватарок. Как бы вы его реализовали?
Какой результат выдаст такой код:
Какие модификаторы доступа допустимые в реализации метода getName
Реализуйте очередь сообщений, используя MySQL для хранения данных. Как избежать ситуации, когда несколько воркеров получат в обработку одинаковое сообщение?
Есть мануал на API с курсом валют. Нужно найти минимумы-максимумы за 5 лет, а потом то же, но с разбивкой по месяцам.
Напишите архитектуру, которая основывается на базовой абстракции. Дочерние классы расширяются с помощью интерфейсов. Реализацию одинаковых методов выполните, используя трейты (реализовывать в абстракции).
Тестовое задание для PHP разработчика на испытательном сроке
После прохождения собеседования (ох и бурное обсуждение получилось), для разработчика наступает испытательный срок. Это один из самых тяжелых этапов для человека на новой работе — идет адаптации с новым коллективом, нескончаемый поток новых знаний, которые с трудом успеваешь усваивать, да еще и тестовое задания, и оно не из простых…
Не буду ходить вокруг да около, а напишу какое оно есть, и надеюсь на Ваши комментарии:
Данное тестовое задание скорей всего больше подходит для junior разработчика, чем для матерого волка seniorа.
Аннотация
Гостевая книга
Гостевая книга. JavaScript и работа с файлами.
К базовой функциональности, следует добавить следующие возможности:
Гостевая книга. Регулярные выражения.
Гостевая книга. JavaScript и AJAX.
Требования
P.S. На картинке изображен двигатель Стирлинга, wikipedia частенько дает пищу для ума.
Upd: очень правильный комментарий появился на моём блоге:
народ, вы видимо не понимаете, на кого это задание рассчитано. Человек с опытом ЕСТЕСТВЕННО не будет его делать по двум причинам: а) не захочет тратить время и б) ему его не дадут.
но реалии таковы, что это часто-густо вообще первое более-менее объёмное задание соискателя на должность junior php developer.
поэтому 80 часов даётся не для того, чтобы он это задание просто сделал, а чтобы привёл реальность (свои знание) в соответствие с галочками в своём резюме напротив php, html, css, js, ajax, mysql.
по выходу получаем некий интегральный показатель как скилованости так и обучаемости и умения гуглить.
собственно с этоим задание справляется.
а кандидаты, которым есть что показать, естественно идут сразу в проекты.
Собеседования на должность PHP разработчика
Довольно часто (постоянно) мне приходиться проводить собеседование людей желающих устроитсья в мой отдел на должность «junior PHP developer» и «PHP developer». И, с завидным постоянством, я и team-lead отдела задаем одни и те же вопросы…
Каждое собеседование начинается с одного и того же вопроса:
— Почему PHP?
Далее, приближаемся к программированию, мы пытаемся понять имеет ли собеседуемый хоть какое-нить представление о ООП, о абстракции, наследовании, инкапсуляции и полиморфизме. Ага, кто-то лекции прогуливал в университете 😉
А теперь начинается самое оно:
— Какую версию PHP использовали? В чем различия между четвертой и пятой версиями?
— Какими сторонними библиотеками пользовались?
— Опыт работы с различными CMF/CMS?
— Типы данных в PHP?(их всего 8, не верите — читайте мануал)
— Назови по памяти функции для работы с массивами, строками
— Что такое сериализация?
И далее несколько практических вопросов…
— Что такое Apache? А mod_rewrite?
— Аббревиатура SVN и CVS о чем-нить говорят?
— Багтрекинг системы? BugZilla? JIRA?
Не забываем и о БД:
— Что такое реляционная база данных?
— Нормализация, денормализация
— И чуть-чуть практики (связь многое-ко-многим в MySQL, каталог товаров произвольной вложенности)
HTML + CSS + W3C (знания HTML на базовом уровне считаю обязательным):
— Нарисуй-ка простенькую форму для отправки файла
— Что такое стандарты W3C?
— С *nix знаком?
— Apache и PHP сетапил?
Сетевые технологии и не только:
— Знаешь что такое уровни модели OSI? Назови хотя бы их количество. (это вопрос на «пять»)
— По какому протоколу осуществляется передача данных в сети Интернет?
— Расскажи что поисходит, когда в строке браузера набираешь адрес и нажимаешь Enter?
Тут особо не мучаем, если же в резюме указан уровень знания английского как «хорошо» — вот тогда нам на помощь спешит COTOHA — лучше правдиво пишите — уровень университета или начальной школы… 😉
Бывает, озадачиваем каким-нить тестом на сообразительность (поменяй-ка друг значение переменных A и B местами не используя третью переменную)
Вот подумываем написать тест, который однозначно говорил бы о уровне знаний человека (brainbench для новичков не подходит), если у кого есть что предложить — пишите в комментариях…
Кросспост: PHP: Собеседование (и там уже много содержательных комментариев)
Upd: Вторым, или даже первым вопросом наверное скоро будет: «Читаете ли вы Хабр по пятницам?»…