Добро пожаловать, Посетитель! [ Регистрация | Войтиrss  |  tw

Разместить объявление

Ответы на тестовое задание на вакансию программиста PHP

| Интернет роботы парсеры грабберы | 18.03.2015

Здесь мои ответы на тесты для программиста.

Были предложены такие исходные данные:

Вам предлагается пройти тестовое задание на вакансию программиста PHP.
Тест содержит 4 вопроса по разным тематикам. Мы считаем, что хороший PHP-программист должен обладать знаниями в смежных областях и хорошо понимать, что происходит в PHP «за сценой», т.е. как именно его программа работает.

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

Задание на Тест №1:

JS/HTML/CSS

Дано:

Задача: написать JavaScript код, делающий “Текст” зелёным, предложите как минимум три варианта (можно больше) (1-2 могут использовать JS библиотеки) только самого кода (копировать задание в ответ не нужно).

Ответ на Тест №1 – смотреть здесь http://faxservice.com.ua/test2/test1-1.htm

Задание на Тест №2:

БД

Дана таблица с деревом категорий

CREATE TABLE category (
id integer not null primary key,
parent_category_id integer references category(id),
name varchar(100) not null
);

Напишите запросы (БД – “правильная”, умеющая делать подзапросы, различные соединения и прочее):
1. На выборку всех категорий верхнего уровня, начинающихся на “авто”
2. На выборку всех категорий, имеющих не более трёх подкатегорий следующего уровня (без глубины)
3. На выборку всех категорий нижнего уровня (т.е. не имеющих детей)

Напишите индексы, которые позволят сделать эти запросы быстрее.

Ответ на Тест №2 – ниже текст решения:

CREATE TABLE test_category (
id INT NOT NULL ,
parent_category_id INT REFERENCES test_category(id),
name VARCHAR(100) NOT NULL,
PRIMARY KEY(id),
KEY(parent_category_id)
)
DEFAULT CHARACTER SET=utf8 ;
/* выполнено */
INSERT INTO test_category (id, parent_category_id, name) VALUES
(1, 0, ‘автомобили марка’),
(2, 1, ‘автомобиль год выпуска’),
(3, 2, ‘автомобиль модель’),
(4, 3, ‘автосервис СТО заказчики’),
(5, 0, ‘автозапчасти производители’),
(6, 3, ‘запчасти двигателя’),
(7, 3, ‘запчасти кузова’),
(8, 3, ‘запчасти коробка передач’),
(9, 3, ‘запчасти подвеска рычаги’),
(10, 6, ‘номер детали двигателя’),
(11, 7, ‘номер детали кузова’),
(12, 8, ‘номер детали коробка передач’),
(13, 9, ‘номер детали подвеска рычаги’),
(14, 11, ‘кросс номер детали кузова’)
;

/* Добавлено 14 строк. ( Запрос занял 0.0004 сек. )
сделаем выборку строк таблицы и вручную отметим каждую строку, сколько она имеет подкатегорий – это для проверки результатов последущих запросов */
SELECT * FROM test_category LIMIT 0, 30 ;
/* 14 строк
id parent_category_id name Количество подкатегорий
1 0 автомобили марка 5
2 1 автомобиль год выпуска 4
3 2 автомобиль модель 3
4 3 автосервис СТО заказчики 0
5 0 автозапчасти производители 0
6 3 запчасти двигателя 1
7 3 запчасти кузова 1
8 3 запчасти коробка передач 1
9 3 запчасти подвеска рычаги 1
10 6 номер детали двигателя 0
11 7 номер детали кузова 1
12 8 номер детали коробка передач0
13 9 номер детали подвеска рычаги0
14 11 кросс номер детали кузова 0
*/
/* тестовый запрос На выборку всех категорий, начинающихся на “авто” */
SELECT * FROM `test_category` WHERE LEFT(name,4) LIKE ‘авто’ ;
/*
id parent_category_id name
1 0 автомобили марка
2 1 автомобиль год выпуска
3 2 автомобиль модель
4 3 автосервис СТО заказчики
5 0 автозапчасти производители
*/

/* Задание 1: На выборку всех категорий верхнего уровня, начинающихся на “авто” */
SELECT * FROM test_category WHERE parent_category_id=0 AND LEFT(name,4) LIKE ‘авто’;
/*
id parent_category_id name
1 0 автомобили марка
5 0 автозапчасти производители
*/

/* Задание 2: На выборку всех категорий, имеющих не более трёх подкатегорий следующего уровня (без глубины) */

SELECT * FROM test_category WHERE id NOT IN ( SELECT parent_category_id FROM test_category WHERE id IN ( SELECT parent_category_id FROM test_category WHERE id IN ( SELECT parent_category_id FROM test_category WHERE id IN ( SELECT parent_category_id FROM test_category )) ));
/* 12 строк
id parent_category_id name
3 2 автомобиль модель
4 3 автосервис СТО заказчики
5 0 автозапчасти производители
6 3 запчасти двигателя
7 3 запчасти кузова
8 3 запчасти коробка передач
9 3 запчасти подвеска рычаги
10 6 номер детали двигателя
11 7 номер детали кузова
12 8 номер детали коробка передач
13 9 номер детали подвеска рычаги
14 11 кросс номер детали кузова
*/
/* Задание 3: Вывод строк с нулем подкатегорий */
SELECT * FROM test_category WHERE id NOT IN ( SELECT parent_category_id FROM test_category);
/* 6 строк
id parent_category_id name
4 3 автосервис СТО заказчики
5 0 автозапчасти производители
10 6 номер детали двигателя
12 8 номер детали коробка передач
13 9 номер детали подвеска рычаги
14 11 кросс номер детали кузова
*/
/* следующий запрос показывает что выборка вложенности подкатегорий пропорциональна вложенности Select – запрос на выборку всех категорий у которых не более двух подкатегорий – на один уровень вложенности select меньше */
SELECT * FROM test_category WHERE id NOT IN ( SELECT parent_category_id FROM test_category WHERE id IN ( SELECT parent_category_id FROM test_category WHERE id IN ( SELECT parent_category_id FROM test_category ) ));
/* 11 строк
id parent_category_id name
4 3 автосервис СТО заказчики
5 0 автозапчасти производители
6 3 запчасти двигателя
7 3 запчасти кузова
8 3 запчасти коробка передач
9 3 запчасти подвеска рычаги
10 6 номер детали двигателя
11 7 номер детали кузова
12 8 номер детали коробка передач
13 9 номер детали подвеска рычаги
14 11 кросс номер детали кузова
*/

Задание на Тест №3:

PHP

Есть два вида скобок, {}, (), дана входная строка, состоящая из этих символов, надо определить, корректна ли строка, т.е. для каждой закрывающей скобки должна быть своя открывающая.

assert(isCorrect(») === true);
assert(isCorrect(‘()’) === true);
assert(isCorrect(‘{()}’) === true);
assert(isCorrect(‘{()}{}’) === true);
assert(isCorrect(‘(())’) === true);
assert(isCorrect(‘{({({({()})})})}’) === true);
assert(isCorrect(‘{(})’) === false);

Задача – реализовать на php функцию isCorrect. Проверьте по указанным assert-ам, что решение проходит.

Ответ на Тест №3 – смотреть здесь http://faxservice.com.ua/test2/test3.php

Задание на Тест №4 (PHP и ООП):

Есть продукты A, B, C, D, E, F, G, H, I, J, K, L, M.
Каждый продукт стоит определенную сумму.

Есть набор правил расчета итоговой суммы:
1. Если одновременно выбраны А и B, то их суммарная стоимость уменьшается на 10% (для каждой пары А и B)
2. Если одновременно выбраны D и E, то их суммарная стоимость уменьшается на 5% (для каждой пары D и E)
3. Если одновременно выбраны E,F,G, то их суммарная стоимость уменьшается на 5% (для каждой тройки E,F,G)
4. Если одновременно выбраны А и один из [K,L,M], то стоимость выбранного продукта уменьшается на 5%
5. Если пользователь выбрал одновременно 3 продукта, он получает скидку 5% от суммы заказа
6. Если пользователь выбрал одновременно 4 продукта, он получает скидку 10% от суммы заказа
7. Если пользователь выбрал одновременно 5 продуктов, он получает скидку 20% от суммы заказа
8. Описанные скидки 5,6,7 не суммируются, применяется только одна из них
9. Продукты A и C не участвуют в скидках 5,6,7
10. Каждый товар может участвовать только в одной скидке. Скидки применяются последовательно в порядке описанном выше.

Необходимо написать программу на PHP с использованием ООП которая имея на входе набор продуктов (один продукт может встречаться несколько раз) рассчитывала суммарную их стоимость.
Программу необходимо написать максимально просто и максимально гибко.
Все параметры задаются в программе статически (пользовательский ввод обрабатывать не нужно). Оценивается подход к решению задачи. Тщательное тестирование решения проводить не требуется.

Пожелания к решению:
• Чтобы в коде были учтены принципы SOLID (особенно инверсия зависимостей)
• Взаимоотношения (контракты) между объектами должны быть прозрачны
• Низкая связанность, высокая связность
• Желательно предпочтение динамически зависимостям над статическими
• Выделение архитектурных слоев – бизнес-логика, инфраструктурный, операционный (см. Domain driven design)

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

// создаем объекты продуктов
$objectA = new Product(‘A’, 1000);
$objectB = new Product(‘B’, 100);
// … остальные продукты

// создаем объекты скидок и конфигурируем их связи с продуктами
$discount1 = new Discount_ProductSet();
$discount1->setProductSet($objectA, $objectB);
$discount1->setDiscount(10);
// … остальные скидки

// формируем заказ в корзине
$productOrder = new Order();
$productOrder->push($objectA);
$productOrder->push($objectA);
$productOrder->push($objectB);

// менеджер применения скидок. добавляем в него активные скидки
$discountManager = new Discount_Manager();
$discountManager->add($discount1);

// расчет цены. добавляем в него активные скидки и заказ, производим расчет
$calculator = new Calculator();
$calculator->setOrder( $productOrder );
$calculator->setDiscountManager ($discountManager);
print_r($calculator->doCalculation());

// следует использовать для проверки передаваемых в методы аргументов возможности php 5.3.
// пример сигнатуры метода public function add(Discount_Abstract $discount );

Ответ на Тест №4 – смотреть здесь http://faxservice.com.ua/test2/test4-oop.php
Решено двумя способами. Есть уточнения при постановке задачи.

Я открыт для ваших предложений. Пишите, звоните.

 ©  -  dm @ home-rent.kiev.ua    +380-68-351-1825

Будьте социальным, нажмите КНОПОЧКУ ...
  • Twitter
  • Facebook
  • email
  • StumbleUpon
  • Delicious
  • LinkedIn
  • BlinkList

Спонсорские ссылки

3 Ответов к “Ответы на тестовое задание на вакансию программиста PHP”

  1. admin вкл 28.04.2015 @ 23:17

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

    К примеру, по сравнению с октябрьскими показателями апрельские зарплаты тим-лидов выросли, а зарплаты Android-разработчиков — просели.

    Об этом свидетельствует свежий зарплатный рейтинг сервиса Djinni.

    Рейтинг составляли на основании средних зарплат кандидатов, которые получали предложения от работодателей на сервисе. Для 2014 года использовали данные октября-ноября, для рейтинга за 2015 год — мартовские и апрельские данные. В выборку попали 30 000 вакансий, учитывались только кандидаты из Украины (удаленная работа и полный день в офисе).

    Нужно учитывать, что хотя рейтинг и показывает усредненные данные по спросу на программистов, не всегда их можно трактовать однозначно.

    К примеру, если на рынке вырастет количество опытных кандидатов, то вырастет и показатель средней зарплаты, но не цена конкретного специалиста.

    зарплаты программистов

    Напомним, в конце прошлого года создатель сообщества для разработчиков DOU.ua и сервиса Djinni Макс Ищенко запустил ресурс salarycheck.org, который показывает текущие зарплаты украинских программистов.
    По материалам AIN.UA

  2. Вася вкл 27.07.2015 @ 15:24

    Более 100 тысяч клиентов российского Сбербанка стали жертвами интернет-мошенников.

    Суммарные потери клиентов банка оцениваются примерно в 2 млрд рублей ($34 млн).

    Практически все пострадавшие пользовались приложением «Сбербанк Online» для Android на смартфонах, зараженных специально созданным вирусом-трояном.

    Вредоносная программа способна похищать средства с привязанных к телефонным номерам карт Сбербанка. При этом клиент может долгое время не замечать списания средств, так как вирус блокирует информационные SMS-сообщения от банка.

    В региональных управлениях МВД Северо-Западного федерального округа подтверждают факты хищений средств клиентов банка. О том, проводились ли по фактам хищения средств какие-либо следственные действия и к каким результатам они привели, сотрудник МВД не сообщил. Зато источник в МВД России сообщил, что «банк перекладывает ответственность на клиентов, утверждая, что отсутствие антивируса — их проблема».

    Все жертвы пользовались смартфонами на базе Android, которые были заражены трояном. В Сбербанке рассказали, что уже выпустили приложение «Сбербанк Онлайн» со встроенным антивирусом. Однако говорить об ограбленных мошенниками клиентах в банке не стали.

    Напомним, что недавно в банковской сфере Санкт-Петербурга была совершена крупнейшая кибератака в истории. Жертвой стал банк «Санкт-Петербург», от которого хакеры теперь требуют 29 млн рублей ($508 тысяч) за неразглашение данных клиентов.

    По материалам PaySpaceMagazine

  3. Вася вкл 30.07.2015 @ 09:59

    Государственная служба занятости совместно с рядом IT-компаний намерена организовать подготовку специалистов IT-сферы.

    Такие планы содержатся в меморандуме о сотрудничестве, подписанном в среду руководителем Госслужбы занятости Ярославом Кашубой, директором Brain Academy Игорем Закаловым и представителями IT-компаний Astound Commerce, Infotek, NIX Solutions.

    “Меморандум – это рамочное соглашение, которое поможет Госслужбе занятости, работодателям и учебной программе Brain Academy дать человеку шанс, который сегодня является безработным или хочет получить новую профессию, новую квалификацию”, – заявил Я.Кашуба.

    По его словам, в рамках меморандума Госслужба будет предоставлять помещения в учебных центрах, которые есть во всех регионах. При этом в учебных группах будут отведены квоты для бесплатного обучения вынужденных переселенцев и участников АТО.

    Я.Кашуба подчеркнул, что из государственного бюджета на эти проекты средства не будут выделяться. Однако он не исключил, что часть финансирования может быть выделена Государственной службой по делам ветеранов войны и участников АТО.

    В целом, по его данным, в настоящее время в Украине зарегистрировано более 400 тыс. безработных и 43 тыс. вакансий, преимущественно рабочих специальностей. На IT-специалистов спрос есть, но при наличии опыта работы и соответствующего уровня знаний.

    Директор Brain Academy И.Закалов отметил, что запрос на IT-специалистов ежегодно увеличивается на 15%. При этом из выпускников вузов по данным направлениям трудоустраивается около 45% из-за того, что обучение ведется по устаревшим программам и методикам.

    По его словам, ориентировочно в рамках меморандума будут проходить обучение около 1 тыс специалистов.

    По материалам Интерфакс-Украина

Написать ответ


8 × = двадцать четыре


Баннер

МЕТА - Украина. Рейтинг сайтов