О чем и для кого статья
Привет всем! Данная статья адресована начинающим свой путь в системном анализе и призвана помочь ответить максимально просто на один из самых частых вопросов системному аналитику на собеседовании. Мне данный вопрос задали на 3х из 5ти технических интервью, а это значит, что в теме надо разобраться. Поехали!
Вопрос: на сайте есть форма с полем поиска чего-либо по названию и кнопка, при нажатии на которую должен быть выведен результат поиска. Проблема в том, что пользователь не помнит название. Как реализовать поиск?
Первый шаг к ответу - а что, собственно, хотят услышать?
Как оно водится, единого ответа нет. Иногда достаточно привести хотя бы одно решение. Но лучше начать с уточнения бизнес-процессов, типов полей, ограничений, что конкретно интересует, а потом перейти к перечню возможных вариантов реализации. Возможно, то, что написано далее лично Вам не потребуется.

В моем же случае, за последний месяц в большинстве случаев этот вопрос сводился к тому, чтобы получить понимание, знает ли кандидат структуру URL, а точнее как передать в URL GET или POST запрос и что означают знаки "?", "+", "%", "=", введенные в адресной строке.
Бывает, что интервьюер уточняет, что хочет увидеть пример JSON запроса, который будет отправлен на BACK. Замечу, что примеры XML запросов лично у меня никогда не спрашивали.
JSON cформирован. Как его передать на сервер? В этот момент с Вами захотят поговорить о брокерах сообщений Каfka и RabbitMQ.
Предположим, что запрос отправлен, а как он будет обработан? Как получить нужные данные для отображения?
Ну, и конечно, вопросы безопасности. Некоторые данные нельзя передавать в открытом виде.
Хорошая идея при ответе на вопрос выше - Вы можете попробовать увести диалог в стороны, в которых Вы наиболее сильны.
Что надо понимать
При ответе на вопрос выше надо хотя бы примерно понимать "бизнес" - процесс реализации поиска по введенной подстроке. Почему я говорю о бизнес-процессе, а не о технологии? Да, потому что создание сайтов (а вместе с ними внутренних порталов и CRM cистем) стандартизируется, а вместе с этим стандартизируется работа системных аналитиков. И когда им ставится задача выше они должны ее декомпозировать на вполне определенные блоки, чтобы поставить конкретные задачи на разных участников команды. А это уже бизнес-процесс самого системного аналитика, который спустя годы будет также автоматизирован.
Итого, чтобы получить таблицу с данными, найденными по подстроке, введенной пользователем, системного аналитику надо будет поставить задачи на вот такой набор работ как минимум:

Где искать подстроку в URL - кратко
Введенные параметры с указанием полей поиска идут сразу после вопросительного знака «?» и используется при передаче данных на сервер в случае GET запроса. В случае POST запроса данные будут отправлены "скрыто" в теле запроса, а не адресной строке. Поля и введенные в них данные разделяются символом амперсанда («&» (а по-русски "и")). Никаких кавычек добавлять к введенной подстроке при формировании URL не надо.
Ниже на картинке на сайте с доменом discript.ru по безопасному протоколу HTTPS на странице blog запросили данные по введенных в полях name и topic строкам. В первом ввели "struktura-uml", во втором - "seo".
Если бы в поле name ввели "struktura uml", то параметры запроса передали бы вместо пробела " " - знак "+".
А если бы в поле name ввели "struktura+uml", то параметры запроса передали бы вместо "+" - "%2B".

Как сформировать JSON или XML - кратко
JSON или XML запроса состоит из 3х блоков:
-
Метод + путь URL
-
Метод. Ниже приведены наиболее часто используемые.
GET Запрашивает получение данных с сервера.
POST Создает новый ресурс или обновляет существующий на сервере.
PUT Полностью заменяет указанный ресурс новыми данными.
DELETE Удаляет указанный ресурс.
PATCH Частично обновляет указанный ресурс.
URL:
/api/data?[параметр=значение]с указанием параметров запроса в случае открытой передачи данных или/api/dataбез параметров запроса, если данные передаются в теле запроса это путь к ресурсу на сервере.
-
Заголовки:
Host: Указывает доменное имя сервера.
Content-Type: тип содержимого, например, application/json, при необходимости.
Content-Length: Указывает длину тела запроса в байтах, при необходимости.Тело запроса с описанием объекта или массива в формате "ключ-значение"
Разница между JSON и ХML будет только в формате тела запроса. Ниже примеры.
GET запрос |
POST запрос |
|
JSON |
Для GET запроса тело отсутствует, так как данные передаются открыто в адресной строке после URL
Запрос в формате XML идентичен запросу в формате JSON |
В случае POST запроса введенные данные передаются скрыто в теле запроса.
|
XML |
|
Методы обмена данными между серверами - кратко
Выбор конкретного метода зависит от требований приложения: безопасность, производительность, масштабируемость и совместимость с существующими системами. Ниже основные варианты.
FTP/SFTP: Протокол передачи файлов, используемый для загрузки и скачивания файлов с удаленного сервера.
HTTP/HTTPS: Стандартный протокол для веб-коммуникаций, часто используется для передачи данных через API и RESTful сервисы.
WebSocket: Двухсторонняя связь в режиме реального времени, подходит для приложений, требующих мгновенной реакции (чат, игры).
AMQP/MQTT/Kafka/RabbitMQ: Брокеры сообщений, обеспечивающие асинхронную передачу данных между приложениями. Используются для организации очередей сообщений и событийно ориентированной архитектуры.
SOAP/XML-RPC: Старые стандарты обмена структурированными сообщениями, основанные на XML, используются реже, уступив место современным REST API.
gRPC: Современный протокол RPC (Remote Procedure Call), использующий бинарный формат Protobuf для быстрого обмена большими объемами данных.
Варианты обработки запроса - кратко
После того как будет получено сообщение с данными, введенными пользователем, сервером - необходимо обработать это сообщение и извлечь данные из БД по подстроке. Ниже перечень возможных решений.
Вариант 1: Простое SQL-подобное решение с использованием оператора LIKE
Один из простейших способов реализовать поиск по подстроке – использование операторов сравнения строковых значений в базах данных, например LIKE.SELECT * FROM products WHERE name LIKE '%${userInput}%';Вариант 2: Использование полнотекстового поиска (Full-text search), встроенныго в большинство современных СУБД. Это позволит учитывать морфологию, стемминги и синонимы, обеспечивая более точный поиск.
--Пример использования full-text index в MySQL:CREATE FULLTEXT INDEX idx_name ON products(name); SELECT * FROM products WHERE MATCH(name) AGAINST('${userInput}' IN NATURAL LANGUAGE MODE);Вариант 3: Решение на стороне приложения с использованием регулярных выражений
путем обработки запроса на уровне бизнес-логики. Например, на Python можно создать функцию для фильтрации объектов на основе регулярного выражения:def find_by_substring(data, substring): pattern = re.compile(substring, re.IGNORECASE) return list(filter(lambda x: bool(pattern.search(x['name'])), data))Вариант 4: Реализация автоподсказок (autocomplete) путем создания отдельного API-интерфейса, возвращающего список предложений по мере набора текста пользователем.
Послесловие
Казалось бы вопрос простой, а сколько за ним всего стоит. И еще пару лет назад было достаточно рассказать интервьюеру о том, что будет поставлено несколько задач: на создание полей и кнопок на UI и на обработку запроса BACK'ом. В большинстве своем программисты сами бы определили типы запросов, коды новых поле, способы извлечения данных из БД и т.д. Вопрос способа реализации передачи данных вообще бы не стоял при доработке для существующего функционала.
Почему интервью стали столь глубоки - мне не известно, но факт остается фактом. Собеседования аналитиков теперь проходят очень жестко по заранее подготовленным задачам без "бла-бла-бла "и "кем вы видите себя через 5 лет".
Комментарии (15)

UnknownUserMax
14.12.2025 23:57Проблема в том, что пользователь не помнит название. Как реализовать поиск?
Давать пользователю леща, пока не вспомнит.

CitizenOfDreams
14.12.2025 23:57Было бы замечательно, если бы на собеседованиях давали решать другое задание: "Пользователь ввел в строку поиска название, которое он точно помнит. Как вывести результаты, которые содержат это название, и НЕ ВЫВОДИТЬ ПЛЯТ результаты, которые его не содержат?"

PeeWeee
14.12.2025 23:57Тогда это будет собеседование не на аналитика (как бы нам еще чего-нить впарить пользователю), а на какого-нибудь юристконсульта (а нам точно ничего не будет если мы это сделаем) ¯\__(ツ)_/¯

andozhskaya Автор
14.12.2025 23:57Теперь это должен делать аналитик, исходя из вопросов на собеседованиях.

RestTiger
14.12.2025 23:57Мне кажется, после такого вопроса от системного аналитика хотят услышать встречные, например, про объем данных, по которым нужно искать, их организацию, количество одновременных пользователей, требования по скорости ответа... Только после этого можно говорить о реализации. Причем опять-таки от аналитика ждут описание требований, а не алгоритмы работы и форматы обмена.
А если реально ждут то, о чем писали в статье, то им нужен не аналитик...

andozhskaya Автор
14.12.2025 23:57Я тоже так думала, если честно. Ниже ответила, какие вопросы задают далее по итогам уточнения требований. А иногда с них сразу начинают.

santjagocorkez
14.12.2025 23:57?blabla=blabla — это не параметр. &blabla=blabla — тоже. Параметры не включают ? и &. Первый — это разделитель адресного блока URL и блока параметров, второй — разделитель параметров. Но ни первый, ни второй в параметры не входят (пока не экранированы).

bosha
14.12.2025 23:57Это залет, боец. Самое первое, с чем надо было разобраться это что вообще искать, как и по каким полям. Критерии, параметры. В задаче абстрактный наброс и вместо анализа задачи Вы побежали выяснять как будет выглядеть уже реализация. Это не системное мышление аналитика. Не собраны банально требования к самому поиску.

andozhskaya Автор
14.12.2025 23:57Вы ошибаетесь, если думаете, что требования не уточняются. Но... по итогам уточнения бизнес-процессов, полей, их типов и т.д. предлагается написать пример json запроса, спроектировать БД, чтобы получить нужную выдачу, написать sql запрос для получения нужных данных. Заодно спросят о паттернах микросервисной архитектуры и что делать, чтобы неизвестные тебе потребители узнали об измениях в публичном API. И, конечно, зададут вопрос о разнице Soap и Rest.
И первым вопросом, скорее всего, попросят перечислить варианты обмена данными между АС.
aborouhin
Хм... если бы я задавал такой вопрос ("пользователь не помнит название"), особенно аналитику, то я ожидал бы услышать не про URL и JSON, а как нам добиться, чтобы когда пользователь только ввёл "лошад", мы уже подсказали ему искомое "Овсов" :)
andozhskaya Автор
А как этого добиться, как сделать автоподсказки, желательно подключи к поиску ИИ чат к ним?
andozhskaya Автор
Честно говоря, я ожидала бы таких же уточнений и описаний пользовательского пути на UI и их давала. Но сразу же после этого ответа было что-то вроде: "А теперь напишите JSON запрос для передачи этих параметров". =)