> Приходилось ли работать с форматами XML и JSON для обмена данными? (Java)

Уровень: senior · Роль: backend · Язык: Java · Категория: Технические вопросы

Компании: Сбер

Стек: Java

> Пример ответа

Короткий ответ

Да, приходилось работать с обоими форматами в backend-сервисах на Java. JSON обычно использую для REST API и внутреннего обмена между сервисами, XML - для интеграций с legacy-системами, SOAP, конфигураций и документооборота. В Java это Jackson для JSON, JAXB или Jackson XML для XML. Выбор формата зависит от контракта, требований к схеме, производительности и совместимости.

Подробное объяснение

В Java для JSON стандартом де-факто стал Jackson, реже Gson или JSON-B. Для XML - JAXB, Jackson XML, DOM/SAX/StAX. Ключевое различие: JSON проще и компактнее, но не имеет встроенной схемы и пространств имён. XML поддерживает XSD, namespaces, XPath, XSLT, но многословнее и тяжелее по CPU и памяти. На senior-уровне важно понимать trade-off: streaming против tree-model, безопасность десериализации, обработка больших payload, версионирование схем, кодировки, экранирование. Также важно учитывать, что XML часто приходит в SOAP и enterprise-интеграциях, а JSON - в микросервисах и фронтенде.

На практике

Обычно JSON используется в REST и Kafka, XML - в SOAP, B2B и госинтеграциях. Для больших файлов применяю streaming: Jackson Streaming API или StAX, чтобы не держать весь документ в памяти. Для XML валидирую по XSD, для JSON - по JSON Schema. Обязательно настраиваю ObjectMapper: отключение default typing, ограничение глубины, запрет неизвестных полей. Для XML отключаю внешние сущности, чтобы избежать XXE. При маппинге учитываю даты, enum, null-политику и обратную совместимость.

Пример кода

JAVA
// JSON: Jackson
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Order order = mapper.readValue(json, Order.class);
// XML: Jackson XML
XmlMapper xmlMapper = new XmlMapper();
Order xmlOrder = xmlMapper.readValue(xml, Order.class);
// Streaming XML: StAX
XMLInputFactory factory = XMLInputFactory.newFactory();
factory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("data.xml"));
while (reader.hasNext()) {
if (reader.next() == XMLStreamConstants.START_ELEMENT
&& "order".equals(reader.getLocalName())) {
// обработка элемента
}
}

Как отвечать на собеседовании

Стоит сказать, что работал с обоими, и привести конкретные сценарии: JSON для REST и очередей, XML для SOAP и legacy. Затем показать понимание библиотек, streaming, схем и безопасности. Хорошо упомянуть trade-off: JSON быстрее и проще, XML строже и богаче по возможностям. Если спросят про производительность, рассказать про streaming и пулы ObjectMapper. Если про безопасность - про XXE, polymorphic deserialization и лимиты.

Что проверяет интервьюер

Проверяется реальный опыт, а не только знание синтаксиса. Важно, умеет ли кандидат выбирать формат под задачу, работать со streaming, схемами и безопасностью. Также проверяется понимание экосистемы Java: Jackson, JAXB, StAX, Spring. На senior-уровне ожидается осознание trade-off, обработка ошибок, версионирование и производительность.

Типичные ошибки

Часто кандидаты говорят только про JSON и не упоминают XML. Или наоборот, знают синтаксис, но не понимают streaming и схемы. Ошибка - игнорировать безопасность: XXE в XML, default typing в Jackson. Ещё одна - читать большие файлы целиком в память. Также плохо, когда нет примеров реального использования и понимания, когда какой формат уместен.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью