Необязательно решить всё правильно. Мы хотим понять, как Вы подходите к решению задач и пишете код, насколько хорошо разбираетесь в базовых принципах языка. Будьте готовы к обсуждению решений на собеседовании.
Решение необходимо разместить в git и предоставить ссылку.
Общую часть можно поместить в один файл, практическую часть рекомендуется выполнять непосредственно в файлах с заданиями.
Для всех заданий с массивами задан многомерный массив, элементы которого могут содержать одинаковые id:
$array = [
[id => 1, date => "12.01.2020", name => "test1" ...],
[id => 2, date => "02.05.2020", name => "test2" ...],
[id => 4, date => "08.03.2020", name => "test4" ...],
[id => 1, date => "22.01.2020", name => "test1" ...]
[id => 2, date => "11.11.2020", name => "test4" ...],
[id => 3, date => "06.06.2020", name => "test3" ...],
]
- выделить уникальные записи (убрать дубли) в отдельный массив. в конечном массиве не должно быть элементов с одинаковым id.
На выходе:
$array = [
[id => 1, ...],
[id => 2, ...],
[id => 4, ...],
[id => 3, ...],
]
Решение:
$array = array_column($array,null,'id');
$array = array_values($array);
- отсортировать многомерный массив по ключу (любому)
Решение: Аналогично предыдущему
$array = array_column($array,null,'name');
asort($array);
$array = array_values($array);
или
usort($array, fn($a, $b) => $a['name'] <=> $b['name']);
- вернуть из массива только элементы, удовлетворяющие внешним условиям (например элементы с определенным
id
) Решение:
$array = array_filter($array, fn($elem) => $elem['id'] === 1);
- изменить в массиве значения и ключи (использовать
name => id
в качестве парыключ => значение
)
На выходе:
$array = [
"test1" => 1,
"test2" => 2,
"test4" => 4,
"test3" => 3
]
Решение:
$array = array_column($array,'id','name');
- В базе данных имеется таблица с товарами
goods
(id INTEGER, name TEXT), таблица с тегамиtags
(id INTEGER, name TEXT) и таблица связи товаров и теговgoods_tags
(tag_id INTEGER, goods_id INTEGER, UNIQUE(tag_id, goods_id)). Выведите id и названия всех товаров, которые имеют все возможные теги в этой базе.
На выходе: SQL-запрос.
Решение:
select *
from goods where id in (select goods_id
from goods_tags
group by goods_id
having count(tag_id) = (select count() from tags))
- Выбрать без join-ов и подзапросов все департаменты, в которых есть мужчины, и все они (каждый) поставили высокую оценку (строго выше 5).
create table evaluations
(
respondent_id uuid primary key, -- ID респондента
department_id uuid, -- ID департамента
gender boolean, -- true — мужчина, false — женщина
value integer -- Оценка
);
На выходе: SQL-запрос. Решение:
select department_id
from evaluations
where gender = true
group by department_id
having count() = count(case when value>=5 then 1 end);
Решение должно быть "концептуально" правильным. Мы не будем досконально тестировать корректную работу системы на всех краевых случаях :)
- Даны 2 класса. Один реализует поведение объектов, второй - сам объект.
Привести функцию
handleObjects
в соответствие с принципом открытости-закрытости (O: Open-Closed Principle)SOLID
.
- Устранить нарушения первого пункта принципа инверсии зависимостей (D: Dependency Inversion Principle)
SOLID
: « 1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. »
- Имеется метод
getUserData
, который получает данные из внешнего API, передавая в запрос необходимые парамерты, вместе с ключом (token) идентификации. Необходимо реализовать универсальное решениеgetSecretKey()
, с использованием какого-либо шаблона (pattern) проектирования для хранения этого ключа всевозможными способами:
- in file
- in DB
- in server memоry (redis as example)
- in cloud
- etc.
Достаточно реализовать простое решение, которое бы позволяло через параметр (в условной "глобальной конфигурации" / внутри класса данного метода), выбирать любой существующий способ хранения. Перечисленные способы хранения служат лишь примерами для глобального восприятия задачи и не обязательны к реализации, можно ограничиться заглушками.