Code Monkey home page Code Monkey logo

php-interview's Introduction

Тестовое задание на позицию backend-разработчик

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

Решение необходимо разместить в 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" ...],
]

Все решения постараться реализовать НЕ используя циклы for / foreach.

  1. выделить уникальные записи (убрать дубли) в отдельный массив. в конечном массиве не должно быть элементов с одинаковым id.

На выходе:

$array = [
  [id => 1, ...],
  [id => 2, ...],
  [id => 4, ...],
  [id => 3, ...],
]
  1. отсортировать многомерный массив по ключу (любому)

  2. вернуть из массива только элементы, удовлетворяющие внешним условиям (например элементы с определенным id)

  3. изменить в массиве значения и ключи (использовать name => id в качестве пары ключ => значение)

На выходе:

$array = [
  "test1" => 1,
  "test2" => 2,
  "test4" => 4,
  "test3" => 3
]
  1. В базе данных имеется таблица с товарами 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-запрос.

  1. Выбрать без join-ов и подзапросов все департаменты, в которых есть мужчины, и все они (каждый) поставили высокую оценку (строго выше 5).
create table evaluations
(
    respondent_id uuid primary key, -- ID респондента
    department_id uuid,             -- ID департамента
    gender        boolean,          -- true — мужчина, false — женщина 
    value         integer	    -- Оценка
);

На выходе: SQL-запрос.

Практические и архитектурные задачи

Решение должно быть "концептуально" правильным. Мы не будем досконально тестировать корректную работу системы на всех краевых случаях :)

  1. Даны 2 класса. Один реализует поведение объектов, второй - сам объект. Привести функцию handleObjects в соответствие с принципом открытости-закрытости (O: Open-Closed Principle) SOLID.

(код представлен в папке architecture, в файле solid_o.php)

  1. Устранить нарушения первого пункта принципа инверсии зависимостей (D: Dependency Inversion Principle) SOLID: « 1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. »

(код представлен в папке architecture, в файле solid_d.php).

  1. Имеется метод getUserData, который получает данные из внешнего API, передавая в запрос необходимые парамерты, вместе с ключом (token) идентификации. Необходимо реализовать универсальное решение getSecretKey(), с использованием какого-либо шаблона (pattern) проектирования для хранения этого ключа всевозможными способами:
  • in file
  • in DB
  • in server memоry (redis as example)
  • in cloud
  • etc.

Достаточно реализовать простое решение, которое бы позволяло через параметр (в условной "глобальной конфигурации" / внутри класса данного метода), выбирать любой существующий способ хранения. Перечисленные способы хранения служат лишь примерами для глобального восприятия задачи и не обязательны к реализации, можно ограничиться заглушками.

php-interview's People

Contributors

40t0n avatar ogimle avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.