Skip to content

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Notifications You must be signed in to change notification settings

barkhatnat/school2024-test-task3

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Условие задания

Однажды теплым летним вечером вас посетила идея разработать свое расширение для браузера для построения ссылочного графа. Что это означает на практике — ваше расширение активируется на какой-либо web-странице сайта, определяет список уникальных внешних ссылок, после чего повторяет алгоритм для каждой ссылки. Максимальная глубина поиска, визуализация собранных данных и прочие вопросы вы сочли вторичными, а начать решено было с малого — с обходчика страниц, который бы находил уникальные ссылки.

В процессе проектирования вы решили немного упростить ваш mvp и в итоге поставили себе задачу следующим образом: реализовать поиск всех уникальных ресурсов (доменов) в рамках страницы, на которые есть ссылки. При этом, формулируя задачу, вы сделали следующие допущения:

  • Доменом считается запись вида example.com;
  • Поддомен, например, sub.example.com, считается отдельным ресурсом;
  • Протокол (при наличии) не имеет значения.

Требования к реализации:

  1. Реализация должна содержать, как минимум, одну процедуру (функцию/метод), отвечающую за поиск уникальных ресурсов, и должна быть описана в readme.md в соответствии с чек-листом;
  2. В качестве входных данных программа использует реальный html-файл (page.html) , считав который, начинает выполнять поиск;
  3. Процедура (функция/метод) поиска должна возвращать строку в формате json следующего формата:
    • {«sites»: [«mail.ru», «rbc.ru», «ria.ru»]}
  4. Найденные в соответствии с условием задачи домены должны выводиться в нижнем регистре без указания протокола и «www» в алфавитном порядке.

Автор решения

Бархатова Наталья Александровна

Описание реализации

Для парсинга .html я использовала библиотеку Jsoup - https://mvnrepository.com/artifact/org.jsoup/jsoup/1.17.2

Для преобразования в JSON-строку я использовала библиотеку json для java - https://mvnrepository.com/artifact/org.json/json/20231013

Для подтягивания зависимостей использовала Maven

Программа работает следующим образом:

  1. Пользователь вводит через консоль название файла и его расширение. Если ввод не соответсвует требованиям, запрос совершается ещё раз. (До успешного результата)
  2. Через Jsoup парсится html-файл и находит все теги , далее из каждого тега извлекается href.
  3. href проверяется на валидность, в случае успеха переходим к извлечению домена.
  4. Если домен ранее был обнаружен нашим поисковиком, мы его не рассматриваем и пропускаем.
  5. Сортируем домены.
  6. Полученные домены преобразуем в JSON строку.

Инструкция по сборке и запуску решения

Перед запуском программы пользователю необходимо загрузить .html в директорию src/main/resources/.

В качестве тестовой страницы в этой папке уже лежит example.html с html-кодом https://www.croc.ru/.

Соберите проект с помощью Maven. (mvn clean, mvn compile, mvn exec:java)

На этом всё

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠒⠦⣄⣠⠶⠞⠳⣆⠀⠀⠀⠀
⠀⠀⠀⣴⠛⠛⠛⠲⢦⣤⡴⠶⠶⢶⠏⠀⢀⣄⣹⣇⡀⠀⠀⣻⡀⠀⠀⠀
⠀⠀⠀⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠂⠀⢿⣼⠋⠀⠉⣿⣍⠉⠉⡆⠀⠀
⠀⠀⠀⢿⡤⠀⠀⠀⠀⠀⠀⠀⠀⠈⠧⠤⠤⠿⢦⣀⣤⠿⠼⠀⣰⠃⠀⠀
⠀⠀⠀⡾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⠤⠶⢿⡀⠀⠀
⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⡧⠤⠆
⣠⣤⢼⡧⢤⠀⠀⠀⢠⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇⠀⠀⠀⣤⣧⣄⡀
⠀⠀⢀⡿⠉⠹⡄⠀⠈⠋⠀⠀⠀⣴⠒⡆⠀⠀⠀⠀⠀⠀⠀⣀⣼⠁⠀⠀
⢠⡞⠉⠛⠀⠀⠹⠶⠶⣄⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠀⣀⠾⠉⠙⠒⠀
⠀⠳⢤⣀⠀⠀⢠⠖⠒⠈⢳⣀⠀⠀⢀⣀⣀⣀⣤⠤⠖⠛⠁⠀⠀⠀⠀⠀
⠀⠀⠀⢹⡀⠀⠘⠲⠖⠃⣼⠋⠉⠁⠉⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠛⠦⣤⣤⠴⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

About

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML 97.5%
  • Java 2.5%