Примеры тестовых заданий на позиции Middle и Senior веб-разработчика

Сегодня пост будет поделён на две части: одно и то же задание из реальной компании для позиции Middle и Senior Web Developer

Итак, задание…

Тестовое задание Middle Web Developer
Необходимо реализовать сервис с следующим функционалом с на языке XXX использованием фреймворка YYY.
В базе данных ZZZ должна быть таблица currency c колонками:
id — первичный ключ
name — название валюты
rate — курс валюты к рублю
Должна быть консольная команда для обновления данных в таблице currency. Данные по курсам валют можно взять отсюда: http://www.cbr.ru/scripts/XML_daily.asp
Реализовать 2 REST API метода:
GET /currencies — должен возвращать список курсов валют с возможность пагинации
GET /currency/ — должен возвращать курс валюты для переданного id
API должно быть закрыто bearer авторизацией.

В конкретной вакансии указывается язык программирования и иногда версия языка. Ну пусть это будет NodeJS или PHP — смысл задачи не меняется. NodeJS 5 и NodeJS 11 отличаются по возможностям, так же как PHP 5.6 и PHP 7.2 или Python 2.7 и Python 3.7).
В задании может быть указан фреймворк, а иногда просят наоборот, без фреймворка сделать, вот к примеру тестовое задание — сокращатель ссылок без фреймворков).
Также нужен навык работы с указанной базой данных: MySQL 5.5 отличается от MySQL 8, так же как PostgreSQL, MongoDB и другие.

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

Для решения задачи понадобится понимание парадигмы REST API, навык работы с XML, опыт защиты доступа к данных путём авторизации. Не лишним будет понимание, как работают крон-задачи. И важным плюсом будет уменить написать тесты.

Ожидаемое решение этой задачи — это условно несколько файлов помимо фреймворка:

  • скрипт для доступа к базе данных к указанной сущности (так называемая модель данных)
  • скрипт для создания модели данных этой сущности в базе данных (так называемая миграция)
  • скрипт, который запускается из консоли вручную или (так называемый консольный контролер), обращается к чужому серверу по HTTP, разбирает ответ формата XML, сохраняет в базу данных
  • скрипт, который будет выдавать сведения из базы данных при запросах по HTTP протоколу (так называемый веб-контролер)
  • скрипт, который будет проверять доступ к данным при запросах по HTTP протоколу
  • скрипт для тестирования консольного контролера и веб-контролера

Ты зашел в эту статью с целью найти решение? Его не будет. Но ты можешь прислать мне своё, а я его оценю и дам подробную обратную связь. Мои контакты.

Как считаешь, это задание можно применять для веб-разработчиков уровня Senior? Чем вообще отличается сеньор от миддла?

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

Задание для Senior могло бы звучать так:

Тестовое задание (1) Senior Web Developer
Необходимо реализовать сервис, выдающий текущий курс валюты и историю изменения курса через HTTP REST API, с доступом только для авторизованных пользователей.
Фреймворк YYY, можно использовать БД ZZZ.
Доп требование:
1. История курсов валют должна быть на каждый день, без пропусков.
2. Объяснить, что нужно добавить или изменить, чтобы сервис мог выдержать 1500 запросов в секунду.

Ещё один вариант

Тестовое задание (2) Senior Web Developer
Объясни как работает или мог бы работать сервис http://www.cbr.ru/scripts/XML_daily.asp настолько подробно, насколько можешь. Какие задачи он выполняет, какие сложности встречаются, как эти сложности можно решить?

И ещё вариант

Тестовое задание (3) Senior Web Developer
Представь, что в мире вообще ещё нет сервисов курсов валют. Вообще. Но есть потребность в их наличии. Как бы ты реализовал сервис, который даёт другим программным системам получать курс валют в режиме с ежедневной историей или в режиме реального времени. Пошагово, с нуля до стабильной эксплуатации.

Ну что, миддл? Хочешь стать синьором? Тогда пиши в коментах или присылай мне свои варианты решений. Посмотрим, насколько ты круто сварен.

Ответы от меня будут 1 марта. Подписывайся на новости, чтобы не пропустить.

Хочешь разбор этого задания или твоего решения в формате вебинара — напиши тут в коментах.

Вперёд!

Обложка к статье: Crafting Magic от light-recycled

Павел Волынцев

Уже более 15 лет занимаюсь разработкой веб-проектов. Fullstack Senior Developer. IT евангелист — доношу свет знаний об информационных технологиях. Профессиональные цели: Дать людям возможность дать людям больше.

Читайте также:

  • Dmitry Darov

    Буквально на днях видел подобное задание, но для джуна) За двое суток реализовать сервис для логистики, с несколькими часовыми поясами, календарём на фронте, проверками. Думал ошиблись, но нет, по телефону тоже сказали что это для PHP джуна на 50к в месяц в Нерезиновой.

    • Дайте ссылку на вакансию, пожалуйста

      • Dmitry Darov

        Таки нашёл) Это вакансия https://clck.ru/T4eJ3 а это ТЗ https://clck.ru/T4eKv отправили сообщение 27,
        срок выставили 29.01 к 15:00

        • Да, они загнули сложность. Согласен.