Code Monkey home page Code Monkey logo

java-tesk-task's Introduction

Тестовое задание по java

Само задание находится в файле TASK.md

Тесты написаны с помощью junit 5

К реализации задачи нахождения различий в html файлах можно было подойти двумя способами:

  1. Сравнивать html страницы как строки
    + Скорость
    + Использование только стандартной библиотеки java
    - Любые различные строки, являющиеся идентичными html страницами будут рассматриваться как различные html страницы
    Способы решения проблемы:

    • Написать свои классы для html элементов, которые можно будет сравнивать без учета порядка атрибутов и переноса строк в тексте
    • Но не нужно изобретать велосипед, когда есть готовые и надежные инструменты
  2. Парсить строки в DOM и сравнивать элементы

    • В java для манипуляций с DOM широко используется org.w3c.Document
    • Но он используется для xml документов, а не любой html файл является валидным xml файлом
    • Поэтому выбор пал на библиотеку Jsoup
      + Надежность: при использовании библиотеки не возникнет ошибок в парсинге строки в документ
      + Можно легко манипулировать элементами в документе и сравнивать их между собой + Масштабируемость: при необходимости можно получать текущий html код страниц напрямую по ссылке, не используя для этого хэш таблицу
      + Масштабируемость: при данном подходе легко можно отслеживать, какие именно изменения в html страницах были внесены и уведомлять об этом пользователя
      - Использование сторонней библиотеки увеличивает размер скомпилированных файлов программы
      - В контексте данной задачи используется лишь небольшой функционал библиотеки

Немного о реализации:
 К сожалению, в jsoup для Document и Element не переопределены hashCode() и equals(),
 поэтому пришлось писать свои методы, которые проверяют идентичность html элементов,
 иначе задача решалась бы в одну строку :)

java-tesk-task's People

Contributors

mnlght03 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.