Тестовое задание по java
Само задание находится в файле TASK.md
Тесты написаны с помощью junit 5
К реализации задачи нахождения различий в html файлах можно было подойти двумя способами:
-
Сравнивать html страницы как строки
+
Скорость
+
Использование только стандартной библиотеки java
-
Любые различные строки, являющиеся идентичными html страницами будут рассматриваться как различные html страницы
Способы решения проблемы:
- Написать свои классы для html элементов, которые можно будет сравнивать без учета порядка атрибутов и переноса строк в тексте
- Но не нужно изобретать велосипед, когда есть готовые и надежные инструменты
-
Парсить строки в DOM и сравнивать элементы
- В java для манипуляций с DOM широко используется org.w3c.Document
- Но он используется для xml документов, а не любой html файл является валидным xml файлом
- Поэтому выбор пал на библиотеку Jsoup
+
Надежность: при использовании библиотеки не возникнет ошибок в парсинге строки в документ
+
Можно легко манипулировать элементами в документе и сравнивать их между собой+
Масштабируемость: при необходимости можно получать текущий html код страниц напрямую по ссылке, не используя для этого хэш таблицу
+
Масштабируемость: при данном подходе легко можно отслеживать, какие именно изменения в html страницах были внесены и уведомлять об этом пользователя
-
Использование сторонней библиотеки увеличивает размер скомпилированных файлов программы
-
В контексте данной задачи используется лишь небольшой функционал библиотеки
Немного о реализации:
К сожалению, в jsoup для Document и Element не переопределены hashCode() и equals(),
поэтому пришлось писать свои методы, которые проверяют идентичность html элементов,
иначе задача решалась бы в одну строку :)