Skip to content

OOP, Prime Number, XML, Simple XML, JavaScript, AJAX - XMLHttpRequest, MySQL

Notifications You must be signed in to change notification settings

sinfwaveEmploymentTest/KommersantKartotekaEmploymentTest

Repository files navigation

Тест на трудоустройство в компанию Коммерсантъ КАРТОТЕКА с открытой публикацией кода.

Использовались при выполнении:

  1. XAMPP PHP 7.4.5
  2. MariaDB 10.4.11 (аналог MySQL 5.6)
  3. Visual Studio Code 1.45.1 (редактор IDE)

*Комментарии писались на английском языке


Текст теста и примеры выполнения:

PHP

Задание 1

Напишите код (функцию, класс), которая проверяет простое число или нет На вход - число, выход — да/нет

Ответ 1

export\primeNumberCheck.php (полный код) Реализована функция без формы ввода, входящий аргумент указывается в коде (дальнейшие примеры с OOП) Пример вывода:

img

Пример использования:

img

Задание 2

Есть счет, в котором указана сумма с НДС, есть дата счета и все прочие атрибуты. Напишите класс, в нем метод - в который на вход поступает информация о счете, на выходе - стоимость без НДС (страна - Российская Федерация)

Ответ 2

export\invoiceData.php (полный код) Реализация зависит от вида поступаемых данных, был выбран статический метод, данные счета поступают в строковом массиве, после расчетов в массив добавляются новые данные, метод возвращает дополненный массив. Пример вывода:

img

Пример использования:

img


XML

Задание 1

Найдите ошибки в файле в приложении (export\test.xml)

Ответ 1

В 4 строке лишний пробел после цифры года. В 37 строке номер лота указан в Description, хотя указан в ноде Order ранее (возможно ошибка). В 74 и 75 строке & escape на & или & или &.

Задание 2

Напишите код (на PHP) выдающий массив данных:

  • Должник: id, тип, имя
  • Список лотов: по каждому - номер, стоимость, описание.
Ответ 2

export\showXmlData.php (полный код) Пример вывода:

img

Пример использования:

img


MySQL

Задание 1

Перечислите, чтобы вы поправили в таблицах (тип данных, название, длину - что угодно - и почему)

Ответ 1

Foreign key office_id в таблице users имеет значение smallint(6) signed (-3768 – 32767) в исходной таблице tinyint(3) unsigned (0 – 255).

Негативные id офисов скорее всего использоваться не будут и если количество уникальных офисов будет больше 255 то можно изменить datatype в исходной таблице на smallint unsigned и foreign key в таблице users на такой же.

Smallint Length\Type можно сменить на 5, так как максимальное количество id будет 65535, что бы выдавалось ровно 5 знаков.

Если количество уникальных офисов меньше 255 можно использовать tinyint(3).

Можно убрать разрешение NULL значений на office.name поле и users.name поле. Поставить Length\Type 200 на office.name поле и увеличить users.name поле до 100, возможны длинные названия фирм (если это фирмы) и составные фамилии у сотрудников.

Задание 2

Выведите имена пользователей и названия офисов, в которых они сидят

Задание 3

Выведите названия офисов, в котором сидят больше, чем один пользователь

Ответ 2, 3

export\sqlUsersOfficesData.php (полный код) Класс для примера оформления (в том числе и пример конструктора с созданием инстанса коннекта к базе данных (обычно в модели) на основе PDO), можно конечно процедурально. Пример вывода:

img

Пример использования:

img


JS

Задание 1

Напишите скрипт, который будет вытаскивать первое предложение последней (по дате) новости на www.karoteka.ru

Ответ 1

export\scripts.js (полный код) export\jsScriptsDemo.html (полный код) В задании скорее всего опечатка — www.kartoteka.ru. Новости в основном представлены в произвольном формате. Без скрытых или явных разделителей. Предложения обычно заканчивается на точку, это и было выбрано в качестве окончания предложения. После изучения текста новостей были добавлены логические условия определения нового предложения по ключевым словам " Требования", " Уставный", " Срок". Конечно можно было бы добавить скрытый разделитель, например вида   после точки в текст при генерации новости и по нему определять конец предложения, если планируется выгрузка первого предложения на сторонний сайт при помощи скрипта. (приведенный скрипт можно использовать при условии что CSS класс текстовых новостей не изменен)

Пример вывода:

img

Задание 2

Напишите код, который исполнив в консоли, получим в подвале www.karoteka.ru (рядом с телефоном) текущее время (обновляемое по секундам)

Ответ 2

В задании скорее всего тоже опечатка — www.kartoteka.ru. Пример Вы можете найти так же в файлах:

export\scripts.js (полный код) export\jsScriptsDemo.html (полный код)

В файле export\jsScriptsDemo.html расположено демо.

img

Приведенный ниже скрипт можно использовать в консоли на сайте www.kartoteka.ru, при условии что CSS класс для оформления телефона не изменен.

var phone = document.getElementsByClassName('kart-phone')[0];
var dateTimeSpan = document.createElement('span')
phone.appendChild(dateTimeSpan);
var dt = new Date();
function showTime(phone, dt, dateTimeSpan)
{
	dt.setSeconds( dt.getSeconds() + 1 );
	var h = (dt.getHours() < 10 ? "0" : "") + dt.getHours();
	var m = (dt.getMinutes() < 10 ? "0" : "") + dt.getMinutes();
	var s = (dt.getSeconds() < 10 ? "0" : "") + dt.getSeconds();
	var timeString = h + ':' + m + ':' + s;
	dateTimeSpan.innerHTML = timeString;
	setTimeout(function() {showTime(phone, dt, dateTimeSpan);}, 1000);
}
showTime(phone, dt, dateTimeSpan);

Результат:

img

About

OOP, Prime Number, XML, Simple XML, JavaScript, AJAX - XMLHttpRequest, MySQL

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published