+7 (495) 859-21-36
Предоставляемые услуги
  1. Сайты
  2. Порталы
  3. Интернет-магазины
  4. Мобильные приложения
  5. Лендинги
  6. Брендинг
  7. Нейминг
  8. Продвижение
  9. Дизайн сайта
  10. Личные кабинеты
  11. Аудит сайта
  12. Образовательные платформы
  13. Сайты на Тильде
  14. Комплексный интернет маркетинг
  15. Техническая поддержка
  16. Коммерческие фотосессии
Вакансия

WEB-разработчик Kotlin + PHP

Мы рады, что вы выбрали нашу команду чтобы развиваться в направлении Kotlin + PHP. Перед собеседованием мы просим вас выполнить тестовое задание

Подробнее о вакансии
Тестовое задание:
Задания для вакансии WEB-разработчик Kotlin + PHP
Цель задания

Разработать сайт интернет-магазин по продаже авторских мебели, декора и предметов интерьера с реализацией личного кабинета и системой скидок.

Важно по архитектуре Битрикса:

- https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2817
- https://dev.1c-bitrix.ru/api_help/main/general/urlrewrite.php


Две лекции по карте сайта и по модели данных:

- Модель данных: https://disk.yandex.ru/i/1JGh5XQp6GjbHA
- Карта сайта: https://disk.yandex.ru/i/ito8cOeHGOcvXA
- Подход к реализации сайтов под seo-продвижение: https://disk.yandex.ru/i/dMjPaVV3q8TAKQ


Также очень много материалов в в официальной документации Битрикса (для тех задач, которые не разобраны в наших уроках). Активно используем bitrix api, НЕ пытаемся всё и везде выводить с помощью компонентов, применяем их там где целесообразно.


Разбор ТЗ:

https://disk.yandex.ru/d/iqF6t-MbCL_zfw


Дизайн

https://www.figma.com/file/qQpmq63bJRaQPRPTa16Hxk/%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B5--(%D0%B2%D0%B5%D1%80%D1%81%D1%82%D0%B0%D0%BB%D1%8C%D1%89%D0%B8%D0%BA%D0%B8-%D0%B8-%D0%B1%D1%8D%D0%BA)?type=design&node-id=0%3A1&mode=design&t=RaXtUiSKucQ1AYgX-1

Верстка

- https://github.com/RequestDesign/BitrixTest
- https://requestdesign.github.io/BitrixTest

Навигация

1. Логотип - перезагружает страницу
2. Каталог - ведет на якорь с категориями
3. Блог - ведет на якорь с блогами
4. Контакты - раскрывает модальное окно с контактами
5. Поиск - раскрывает инпут поиска
5.1. Любое изменение в инпуте раскрывает модальное окно с результатами поиска
6. Иконка “Избранное” - раскрывает модальное окно
 6.1. при условии, что пользователь авторизован
   6.1.1. с избранными товарами
 6.2. при условии, что пользователь не авторизован
   6.2.1. модальное окно с авторизацией
7. Иконка “Личного кабинета” - раскрывает модальное окно с выбором:
 7.1. при условии, что пользователь авторизован
   7.1.1. Выйти
 7.2. при условии, что пользователь не авторизован
   7.2.1. Войти
   7.2.2. Зарегистрироваться
8. Иконка “Корзины” - раскрывает модальное окно с товарами в корзине
9. Нажатие по категории - выводит товары в категории
10. Нажатие по товару - раскрывает модальное окно с детальной информацией

Требования

Администрирование

1. Общее
 1.1. Версия битрикс - “Малый Бизнес”
 1.2. Логин - RD_DEV_TEST
 1.3. Пароль - RD*q_n*L.Q\7Jl
 1.4. Модуль Vote должен быть удален
 1.5. URL должны строится из транслитированных названий страниц
 1.6. На время разработки сайт должен быть скрыт от индексации
 1.7. Вся информация должна быть разделена на следующие Типы ИБ:
   1.7.1 “Каталог” со следующими ИБ:
    1.7.1.1 “Каталог товаров”
   1.7.2 “Наполнение” со следующими ИБ:
     1.7.2.1 “Блог”
     1.7.2.2 “Баннер”
   1.7.3 “Статика” со следующими ИБ:
     1.7.3.1 “Контакты”
   1.7.4 “Обратная связь” со следующими ИБ:
     1.7.4.1 “Обратная связь”

2. Каталог
 2.1. Каталог товаров должен быть “товарным каталогом”
 2.2. Товары должны хранится по следующим разделам:
   2.2.1. Напольные зеркала
 2.2. Торшеры и лампы
   2.2.3. Кресла и стулья
   2.2.4. Столы и тумбы
 2.3. Товар должен обладать следующими параметрами:
  2.3.1. Наименование
  2.3.2. Артикул
  2.3.3. Цена (Свойство товара)
  2.3.4. Цвет
   2.3.5. Высота
   2.3.6. Описание
  2.3.7. Фото
  2.3.8. ?

3. Наполнение
 3.1. Элементы ИБ “Блог” должны обладать следующими параметрами:
   3.1.1. Автор
   3.1.2. Время чтения
   3.1.3. Ссылка
   3.1.4. Наименование
   3.1.5. Дата
   3.1.6. Текст
   3.1.7. Фото
 3.2. Элементы ИБ “Баннер” должны обладать следующими параметрами:
  3.2.1. Привязка к элементу (привязка к элементам торгового каталога)

4. Статика
 4.1 Элементы ИБ “Контакты” должны обладать следующими параметрами:
  4.1.1. Адрес. Город
  4.1.2. Адрес
  4.1.3. Телефон
  4.1.4. Год (для футера)
  4.1.5. Соцсеть 1
  4.1.6. Соцсеть 2
  4.1.7. Соцсеть 3
  4.1.8. Соцсеть 4

5. Обратная связь
 5.1 Элементы ИБ “Обратная связь” должны обладать следующими параметрами:
  5.1.1. Email отправителя
  5.1.2. Дата и время
  5.1.3. Сообщение

Личный кабинет

1. Регистрация
 1.1. Регистрация должна проходить по Email внутри Bitrix
 1.2. Регистрация должна быть обработана только в случае корректного заполнения всех полей:
  1.2.1. Email
  1.2.2. Пароль
  1.2.3. Повтор пароля
2. Вход
 2.1. EmailВход должен проходить встроенными функциями Bitrix
 2.2. EmailПри успешном входе ко всем товарам должна применяться скидка, настраиваемая через настройки “Правила работы с корзиной” в меню настроек “Маркетинг”
3. Избранное
 3.1. Внутри “Пользователя” создать дополнительное множественное поле “Избранное” с типом “привязка к элементам”
 3.2. При нажатии на иконку “Избранное” должно открываться модальное окно, где должны выводится товары с ID из множественного поля “Избранное” пользователя
 3.3. Если при нажатии на иконку “Избранное”, пользователь не авторизован, должно открываться модальное окно с авторизацией

Каталог

1. Листинг
 1.1. При выводе товаров должны указываться из ИБ:
  1.1.1. Наименование
  1.1.2. Категория
  1.1.3. Цена
  1.1.4. Фото
  1.1.5. Цвет (небольшой круг в верхнем левом углу [цвет к кругу применяется через атрибут fill и параметр “Цвет” в hex-кодировке])
2. Категории
 2.1. При выводе категорий должно указываться кол-во уникальных наименований товаров внутри раздела
 2.2. При нажатии по категории должны выводится элементы товарного каталога внутри соответствующего раздела при помощи ajax
 2.3. При каждом обновлении товаров должна происходить переинициализация скриптов добавления в корзину
 2.4. При выборе категории должны обновляться параметры фильтра и кол-ва позиций в разделе
3. Фильтрация
 3.1. Фильтрация должна проходить по следующим параметрам:
  3.1.1. Цена (минимальная и максимальная цена должны определяться текущими товарами)
  3.1.2. Цвет (должны определяться текущими товарами)
  3.1.3. При выводе цветов должно указываться кол-во товаров этого цвета
  3.1.4. При любом изменении фильтра должно проходить обновление выводимых товаров при помощи ajax
  3.1.5. При каждом обновлении товаров должна происходить переинициализация скриптов добавления в корзину
4. Сортировка
 4.1. При любом изменении сортировки должно проходить обновление выводимых товаров при помощи ajax
 4.2. При каждом обновлении товаров должна происходить переинициализация скриптов добавления в корзину
5. Загрузить еще
 5.1. При нажатии на “загрузить еще” должно проходить обновление выводимых товаров при помощи ajax
 5.2. При каждом обновлении товаров должна происходить переинициализация скриптов добавления в корзину
6. Детальная страница
 6.1. Детальная страница должна открываться в модальном окне
 6.2. Детальная страница должна содержать следующие элементы из ИБ:
  6.2.1. Наименование
  6.2.2. Артикул
  6.2.3. Цена
  6.2.4. Цвет наименование
  6.2.5. Цвет в hex-кодировке
  6.2.6. Высота
  6.2.7. ?
  6.2.8. Описание
  6.2.9. Кнопка “Купить” (При нажатии должен срабатывать скрипт, добавляющий товар в корзину внутренними функциями Bitrix)
  6.2.10. Кнопка Добавить в избранное (При нажатии должен срабатывать скрипт, добавляющий ID товара в множественное поле “Избранное” пользователя, при условии, что пользователь авторизован, иначе открывать модальное окно с авторизацией)
7. Корзина
 7.1. Добавление в корзину должно быть реализовано внутренними функциями Bitrix
 7.2. При нажатии на иконку “Корзина” должно открываться модальное окно, где должны выводится товары, добавленные в корзину.
8. Заказ
 8.1. Заказ должен быть реализован внутренними функциями Bitrix
 8.2. Заказ должен быть обработан только в случае корректного заполнения всех полей:
 8.2.1. Имя
  8.2.2. Адрес
  8.2.3. Телефон
 8.3. После успешного оформления заказа информация о заказе должна быть отправлена на почту пользователя, а также на почту, указанную в ИБ “Контакты”
 8.4. После успешного оформления заказа пользователя переводит на страницу “Успешного оформления заказа”

Обратная связь

1. Отправка сообщения по форме обратной связи должна происходить только в случае корректного заполнения всех полей:
 1.1. Email
 1.2. Сообщение (сообщение должно содержать не менее __ символов)
2. Отправка сообщения должна происходить на адрес указанный в элементе ИБ “Контакты”
3. После отправки сообщения на почту оно должно дублироваться в ИБ “Обратная связь”

Поиск

1. Результаты поиска должен выводится на отдельной странице
2. При отсутствии подходящих товаров по результатам поиска, должно выводится специальное изображение
3. При выводе товаров должны указываться из ИБ:
 3.1. Наименование
 3.2. Категория
 3.3. Цена
 3.4. Фото
 3.5. Цвет (небольшой круг в верхнем левом углу [цвет к кругу применяется через атрибут fill и параметр “Цвет” в hex-кодировке])

Блог

1. Листинг
 1.1. При выводе блогов, должно указываться время чтения, указываемое вручную
 1.2. При нажатии на блог должен происходить редирект по указанной в свойствах ссылке
 1.3. При выводе блогов должны быть выведены из ИБ:
  1.3.1. Автор
  1.3.2. Наименование
  1.3.3. Дата
  1.3.4. Время чтения
  1.3.5. Фото

к оглавлению

Важно: выполняется только на физическом рутированном устройстве Android, работа на эмуляторе не принимается, так как это будет считаться значительным упрощением задачи.

У вас два смартфона. Телефон А выполняет роль клиента, телефон Б выполняет роль сервера.

Клиент. UI на Compose: кнопки Config, Старт/Стоп, Scan List. В кофиге указывает ip и порт сервера, нажимаем Сохранить, потом можно редактировать и сохранять.

Сервер. UI на Compose: кнопка Config для выбора порта, кнопка Включить для запуска сервера, кнопка Выключить для выключения сервера. Телефон Б рутирован и серверное приложение имеет полный доступ к файловой системе для чтения/записи.

Логика. Представим, что на телефоне Б установлен гугл хром и пользователь может работать в нём.

При нажатии Старт клиент запускает на сервере процесс сканирования файловой системы с параметром Т.

Сервер раз в Т секунд сканирует все папки, которые использует гугл хром, с максимальной глубиной. Какие папки и что там хранится — предмет вашего технологического анализа.

Результат сканирования — скан, то есть, дерево папок и файлов. Для каждого файла фиксируется его размер.

В дереве новые файлы и папки, по сравнению с прошлым сканированием, имеют статус "Зелёный", а файлы, размер которых изменился по сравнению с прошлым сканированием, имеют статус " Фиолетовый".

Также в скане хранятся ещё три мета-значения: размер всех файлов, время сканирования в миллисекундах, дата-время начала сканирования.

Если обнаружилось какое-либо изменение по сравнению с прошлым сканом, то:
- Вся файловая структура архивируется.
- Текущий скан записывается на сервере в локальную базу SQL lite: само дерево и мета-значения сохраняются в виде txt-файла, а в базу записывается адрес  txt-файла и адрес архива.

Каждый скан сервер отправляет клиенту.

Сканирование, архивирование и сетевое взаимодействие реализуются тремя корутинами.

Сервер каждые 100мс отслеживает объем памяти М1, которую использует процесс, а так же максимальный объем памяти Мmax, предусмотренный ОС для этого процесса. Эти значения также отправляются клиенту в формате M1/Mmax.

Клиент в онлайн режиме показывает M1/Mmax и графическую визуализацию скана (дерева), включая цвета статусов и мета-значения.

Если на клиенте нажать Стоп, то процесс сканирования на сервере останавливается. Нажать Старт - продолжится. При этом проверка и отправка M1/Mmax не останавливается никогда, если сервер включён.

Если на клиенте нажать Scan List, то откроется список сканов. У каждого скана есть кнопка Восстановить. При нажатии клиент отправляет серверу id скана, в свою очередь сервер: завершает процесс хрома, заменяет текущую файловую структуру хрома на файловую структуру скана (которая хранится в архиве), запускает хром, сообщает клиенту об успешном восстановлении. На сервере отображается "Скан id восстановлен, дата-время восстановления,  время потраченное сервером на восстановление". Пока идёт восстановление на экране клиента видно только сообщение "На сервере идёт процесс восстановления скана" и значения М1/Мmax.

___
Сервер и клиент общаются по протоколу websocket.
Для сетевого взаимодействия использовать Ktor.
___

Что хочется увидеть в проекте?
1. Понимание модульности в проекте(в нашем случае это два приложения рамках одного проекта клиент и сервер).
2. Применения шаблона проектирования Singleton.
3. Умение рефакторить собственный код.
4. Использование DI решений.
5. Отсутствие закомментированного кода.
6. Разделение сервисов на слои.

к оглавлению

Форма обратной связи