Тестовые задания при трудоустройстве.

Описание вакансии и тестовое задание на этапе отбора "тестирование".

Обсуждения, делимся возможным решениями и комментарии.

P.S. если будет активность, будут ещё ТЗ

Archi 24.08.2019 в 09:36

Ответы (3)


У меня вот такое было:
Тестовое задание:
Создать одностраничный сайт "Гостевую книгу" на любом PHP фреймворке с формой добавления сообщения.

В форме должны быть поля для ввода: Имени, Email, Заголовка, Текста. (При добавлении сообщения необходимо убедиться, что имя не пустое и не содержит символа "+" и используется валидный емаил)

На той же странице должен быть список всех предыдущих сообщений со возможность постраничной навигации (5 сообщений на странице) и возможностью изменить порядок следования (по времени добавления или по заголовки)

Для хранения данных используйте следующие таблицы в БД:
user:
user_id,name,email,http_user_agent,created_at

message
message_id,user_id,title,text

Задание загрузите на публичный репозиторий и пришлите ссылку.

Требования:
PHP
MySQL
Любой PHP фреймворк

Evgeny 24.08.2019 в 13:07

Тестовое задание skyeng

https://skills.geecko.ru/skyeng-tests

[email protected] 04.07.2021 в 11:01

Закину свои 5 коп.

Необходимо доработать класс рассылки Newsletter, что бы он отправлял письма и пуш нотификации для юзеров из UserRepository.

За отправку емейла мы считаем вывод в консоль строки: "Email {email} has been sent to user {name}"
За отправку пуш нотификации: "Push notification has been sent to user {name} with device_id {device_id}"

Так же необходимо реализовать функциональность для валидации емейлов/пушей:
1) Нельзя отправлять письма юзерам с невалидными емейлами
2) Нельзя отправлять пуши юзерам с невалидными device_id. Правила валидации можете придумать сами.
3) Ничего не отправляем юзерам у которых нет имен
4) На одно и то же мыло/device_id - можно отправить письмо/пуш только один раз

Для обеспечения возможности масштабирования системы (добавление новых типов отправок и новых валидаторов), можно добавлять и использовать новые классы и другие языковые конструкции php в любом количестве. 
Реализация должна соответствовать принципам ООП
class Newsletter
{
    public function send(): void
    {

    }
}

class UserRepository
{
    public function getUsers(): array
    {
        return [
            [
                'name' => 'Ivan',
                'email' => '[email protected]',
                'device_id' => 'Ks[dqweer4'
            ],
            [
                'name' => 'Peter',
                'email' => '[email protected]'
            ],
            [
                'name' => 'Mark',
                'device_id' => 'Ks[dqweer4'
            ],
            [
                'name' => 'Nina',
                'email' => '...'
            ],
            [
                'name' => 'Luke',
                'device_id' => 'vfehlfg43g'
            ],
            [
               'name' => 'Zerg',
               'device_id' => ''
            ],
            [
               'email' => '...',
               'device_id' => ''
            ]
        ];    
    }
}

Тут реализовать получение объекта(ов) рассылки Newsletter и вызов(ы) метода send()
$newsletter = //... TODO
$newsletter->send();
...

Evgeny 24.07.2021 в 14:36

Добавить новый ответ