Все специализации

Системный аналитик: вопросы на собеседовании

60 вопросов с разбором ответов — те формулировки, которые действительно встречаются на интервью.

В Kafka сообщения удаляются на основе политики хранения, которая задаётся параметрами retention. Сообщения хранятся в топиках определённое время (например, 7 дней) или до достижения максимального размера лога, после чего старые сообщения удаляются автоматически. Удаление не зависит от того, прочитал ли потребитель сообщение.

В RabbitMQ сообщения удаляются после того, как они были подтверждены потребителем (acknowledged). Если сообщение доставлено и подтверждено, оно удаляется из очереди. Также сообщения могут удаляться по истечении TTL (time-to-live) или при переполнении очереди, если настроены соответствующие политики.

Да, знаком с концепцией сетевых зон. DMZ (Demilitarized Zone) — это изолированная сеть, которая отделяет внутреннюю сеть организации от внешнего интернета, позволяя безопасно размещать публичные сервисы (например, веб-серверы).

Alpha и Sigma — это примеры имен зон, которые могут использоваться в конкретных организациях для разделения сетей по уровню доверия или функциональности. Например, Alpha может быть внутренней сетью разработки, а Sigma — сетью для тестирования.

Основная идея — сегментация сети для повышения безопасности и управления доступом между зонами.

Apache Kafka — это распределённая платформа потоковой передачи данных, которая работает как высокопроизводительная очередь сообщений с возможностью хранения и обработки больших объёмов данных в реальном времени.

Основные компоненты Kafka:

Брокеры (Brokers) — серверы, которые принимают, хранят и передают сообщения. Несколько брокеров объединяются в кластер для масштабируемости и отказоустойчивости.

Топики (Topics) — логические каналы, куда публикуются сообщения. Каждый топик разбивается на несколько партиций (Partitions) для параллельной обработки.

Продюсеры (Producers) — клиенты, которые отправляют сообщения в топики.

Консьюмеры (Consumers) — клиенты, которые читают сообщения из топиков.

Партиции топика хранятся на брокерах и упорядочены по смещению (offset). Это позволяет консьюмерам читать сообщения последовательно и контролировать, какие сообщения уже обработаны.

Kafka не является классической очередью с удалением сообщений после чтения. Вместо этого сообщения хранятся в течение заданного времени или до достижения размера лога, что позволяет нескольким консьюмерам читать одни и те же данные независимо.

Таким образом, брокеры обеспечивают хранение и передачу сообщений, а топики и партиции позволяют масштабировать и упорядочивать поток данных.

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

Чтобы ответить, что должно быть в таблице, нужно понимать контекст: какую систему или процесс она описывает. Обычно в таблице для системного анализа содержатся ключевые данные, например:

Идентификаторы объектов или сущностей

Атрибуты с их типами и описаниями

Взаимосвязи между сущностями (например, внешние ключи)

Ограничения и правила валидации

Если речь о таблице базы данных, то она должна отражать структуру данных, необходимые поля для хранения информации и обеспечивать целостность данных. Если это таблица требований или бизнес-правил, то там должны быть четко описаны параметры, условия и действия.

Без конкретики сложно дать точный ответ, но в любом случае таблица должна содержать релевантные и структурированные данные, необходимые для решения задачи.

Выбор способа интеграции зависит от требований к системе, характеристик данных и архитектуры:

REST — подходит для синхронного взаимодействия между сервисами через HTTP. Хорош для CRUD-операций, когда важна простота, масштабируемость и широкая поддержка. Используется, если нужна легкая интеграция с веб-клиентами или внешними системами.

Kafka — система обмена сообщениями с высокой пропускной способностью и устойчивостью. Используется для асинхронной интеграции, обработки событий, потоковой передачи данных и построения event-driven архитектуры. Выбирается, когда важна надежность, масштабируемость и возможность обработки больших объемов данных в реальном времени.

SOAP — протокол с жесткой спецификацией, поддерживающий сложные операции, безопасность и транзакции. Часто применяется в корпоративных системах, где важна формальная контрактность, стандарты WS-* и совместимость с устаревшими системами.

Пример выбора:

Если нужно быстро и просто предоставить API для мобильного приложения — REST.

Если требуется обработка событий и интеграция микросервисов с высокой нагрузкой — Kafka.

Если интеграция с банковской системой с требованиями безопасности и транзакционности — SOAP.

В Дом.РФ я занимаюсь анализом требований и поддержкой разработки веб-приложений и мобильных сервисов. Мои основные задачи включают:

Сбор и формализация требований от бизнес-заказчиков.

Создание и поддержка документации, включая пользовательские истории и бизнес-процессы.

Взаимодействие с командой разработчиков и тестировщиков для уточнения деталей и контроля качества.

Анализ пользовательского опыта и предложение улучшений для веб и мобильных приложений.

Участие в планировании релизов и приоритизации задач.

Таким образом, я обеспечиваю связь между бизнесом и технической командой, помогая создавать удобные и функциональные решения для клиентов Дом.РФ.

Да, знаком с AI/ML моделями и применял их на практике. Например, использовал модели машинного обучения для классификации текстов и анализа данных.

Практическое применение включало:

Обучение моделей на основе библиотек scikit-learn и TensorFlow для предсказания пользовательского поведения.

Использование NLP-моделей для автоматической категоризации обращений клиентов.

Внедрение моделей в аналитические системы для улучшения качества прогнозов.

Пример: создание модели классификации с использованием логистической регрессии на Python:

Если разработчик говорит, что решение нереализуемо, нужно:

Выслушать и понять причины — технические ограничения, сложность, ресурсы.

Совместно проанализировать проблему, возможно, предложить альтернативные варианты.

Проверить требования — может, часть можно упростить или изменить.

При необходимости привлечь других специалистов (архитекторов, тимлидов) для оценки.

Объяснить бизнес-ценность решения, чтобы найти компромисс.

Важно сохранять конструктивный диалог и искать совместное решение, а не настаивать на своём без аргументов.

В Apache Kafka нет встроенной приоритизации сообщений на уровне брокера. Сообщения в топиках упорядочены по партициям и смещениям, и потребляются в порядке записи. Для реализации приоритизации обычно используют отдельные топики для разных приоритетов и на стороне потребителя обрабатывают их в нужном порядке.

Пример подхода:

Создать топики: high_priority, normal_priority, low_priority.

Потребитель сначала читает из high_priority, затем из normal_priority и так далее.

Таким образом, приоритизация достигается архитектурно, а не встроена в сам Kafka.

Синхронное взаимодействие — это когда отправитель запроса ждёт ответа, блокируясь до его получения. Это просто и понятно, но может приводить к задержкам и блокировкам, если ответ приходит долго.

Асинхронное взаимодействие — отправитель не ждёт сразу ответа, а продолжает работу. Ответ обрабатывается позже, обычно через callback, событие или очередь сообщений. Это повышает отзывчивость и масштабируемость, но усложняет логику.

Polling — это способ асинхронного взаимодействия, когда клиент периодически опрашивает сервер или ресурс, чтобы узнать, готов ли ответ или изменились ли данные. Например, клиент каждые 5 секунд отправляет запрос, чтобы проверить статус задачи.

Когда выбирать:

Синхронное — когда важна простота и быстрый ответ, и задержки малы.

Асинхронное — когда операции долгие, нужно не блокировать поток или UI, или когда система распределённая.

Polling — когда нет возможности использовать push-уведомления или события, но нужно периодически проверять состояние.

Метод GET в HTTP предназначен для получения данных и считается идемпотентным и безопасным, то есть не должен изменять состояние сервера. Однако в некоторых организациях его не любят по нескольким причинам:

Безопасность: Параметры запроса передаются в URL, который может быть записан в логах, кэшах, истории браузера, что повышает риск утечки конфиденциальных данных.

Ограничение длины URL: В некоторых браузерах и серверах есть ограничение на длину URL, что затрудняет передачу больших объемов данных.

Неправильное использование: Иногда GET используют для операций, которые должны быть POST или PUT, что нарушает принципы REST и может привести к проблемам с кэшированием и безопасностью.

Поэтому в организациях, где важна безопасность и правильное разделение ответственности, предпочитают использовать POST или другие методы для операций, связанных с изменением данных или передачей чувствительной информации.

В SQL WHERE и HAVING используются для фильтрации, но на разных этапах обработки данных:

WHERE фильтрует строки до группировки (до GROUP BY). Он применяется к отдельным записям таблицы.

HAVING фильтрует уже сгруппированные данные, то есть применяется после GROUP BY и позволяет фильтровать агрегированные значения.

Пример:

Здесь WHERE отбирает строки с зарплатой выше 50000, а HAVING — группы отделов с количеством сотрудников больше 10.

Да, в роли системного аналитика часто приходится создавать большие документы, такие как технические задания (ТЗ), которые подробно описывают всю систему.

В таких документах обычно содержатся:

Цели и задачи проекта

Функциональные требования

Нефункциональные требования (производительность, безопасность и т.д.)

Описание архитектуры и компонентов системы

Сценарии использования и бизнес-процессы

Ограничения и предположения

Документ должен быть максимально понятным и полным, чтобы разработчики, тестировщики и другие участники проекта имели единое понимание требований и ожиданий.

Применение промокода обычно реализуется синхронно, чтобы сразу проверить его валидность и применить скидку или бонус к текущей операции. Это важно для пользовательского опыта — клиент должен сразу видеть результат.

Однако в некоторых системах, где проверка промокода требует сложных вычислений или взаимодействия с внешними сервисами, может использоваться асинхронный подход с последующим уведомлением пользователя.

В большинстве случаев синхронное взаимодействие предпочтительнее, так как оно обеспечивает мгновенную обратную связь и предотвращает ошибки при оформлении заказа.

В моём опыте системного аналитика я участвовал в нескольких проектах, начиная с анализа требований и заканчивая поддержкой внедрённых решений. Например, в одном из последних проектов я работал над интеграцией CRM-системы с внутренними сервисами компании, что позволило автоматизировать процессы продаж и улучшить качество данных.

Также у меня есть опыт работы с бизнес-аналитикой, где я собирал и структурировал требования от разных заинтересованных сторон, проводил моделирование процессов и создавал технические задания для команды разработки. Это помогало минимизировать недопонимания и ускорять цикл разработки.

Если интересно, могу рассказать подробнее про конкретный проект, который наиболее релевантен для вашей компании.

Отрисовывать межсетевые взаимодействия и погружаться в сетевую архитектуру нужно, если это помогает понять и проанализировать бизнес-процессы, выявить узкие места или риски.

Для системного аналитика важно иметь представление о том, как компоненты системы взаимодействуют по сети, особенно если:

Требуется оценить производительность или задержки.

Нужно выявить потенциальные точки отказа.

Планируется интеграция с внешними системами.

Однако глубокое техническое погружение в сетевую архитектуру обычно выполняют сетевые инженеры или архитекторы. Аналитику достаточно базового уровня понимания и визуализации для коммуникации с техническими специалистами и принятия обоснованных решений.

В 1С существуют следующие основные типы регистров:

Регистр сведений — хранит информацию, которая не изменяется во времени, например, справочные данные или параметры.

Регистр накопления — предназначен для учета количественных и суммовых показателей, например, остатки товаров, денежные средства.

Регистр расчётов — используется для учета взаиморасчетов с контрагентами, сотрудников и т.п.

Регистр бухгалтерии — отражает бухгалтерские проводки и учетные операции.

Регистр бухгалтерии налогового учета — специализированный для налогового учета.

Каждый тип регистра имеет свою структуру и предназначение, что позволяет эффективно организовать учет и хранение данных в системе 1С.

Consumer group в Kafka — это группа потребителей (consumer), которые совместно читают данные из топика. Каждый consumer в группе получает уникальный набор партиций топика для обработки, что обеспечивает параллелизм и масштабируемость.

Связь с партициями:

Топик в Kafka разбит на партиции.

Каждая партиция может быть прочитана только одним consumer из одной группы одновременно.

Если в группе больше consumers, чем партиций, некоторые consumers будут простаивать.

Если consumers меньше, чем партиций, некоторые consumers будут читать несколько партиций.

Таким образом, consumer group позволяет распределить нагрузку по партициям и обеспечить балансировку потребления сообщений.

Для MVP-банка с ипотекой и созаёмщиками можно спроектировать базу данных с такими основными таблицами:

Customers (Клиенты): CustomerID (PK), FirstName, LastName, DOB, ContactInfo

Loans (Кредиты): LoanID (PK), LoanType, Amount, InterestRate, StartDate, EndDate

Properties (Имущество): PropertyID (PK), Address, EstimatedValue

LoanApplications (Заявки на кредит): ApplicationID (PK), CustomerID (FK), LoanID (FK), Status

CoBorrowers (Созаемщики): связь многие-ко-многим между LoanApplications и Customers

Связи:

Один клиент может иметь несколько заявок.

Заявка может иметь нескольких созаемщиков (включая основного заемщика).

Каждая заявка связана с конкретным кредитом.

Кредит может быть обеспечен одним или несколькими объектами недвижимости.

Пример таблицы для созаемщиков:

Такой дизайн позволяет гибко учитывать несколько созаемщиков и связывать их с конкретными заявками на ипотеку.

Я работал с различными типами баз данных, включая реляционные и нереляционные. Среди реляционных — PostgreSQL, MySQL, Microsoft SQL Server. Из нереляционных — MongoDB, Redis. В зависимости от проекта выбираю наиболее подходящую базу данных, учитывая требования к структуре данных, масштабируемости и производительности.

Необходимость в организации Consumer Group в Apache Kafka возникает, когда нужно обеспечить масштабируемое и параллельное потребление сообщений из топика несколькими потребителями.

Основные причины:

Распределение нагрузки: Consumer Group позволяет нескольким потребителям совместно читать из одного топика, при этом каждый партиция топика обрабатывается только одним потребителем из группы.

Обеспечение отказоустойчивости: Если один потребитель выходит из строя, другой из группы может взять на себя обработку его партиций.

Гарантия порядка обработки: Поскольку партиции читаются одним потребителем, порядок сообщений в партиции сохраняется.

Пример: если у вас есть топик с 4 партициями и 2 потребителя в одной Consumer Group, то каждый потребитель будет читать с двух партиций. Если добавить третьего потребителя, один из них останется без партиций, так как партиций меньше, чем потребителей.

Таким образом, Consumer Group необходима для масштабирования и надежности обработки сообщений в Kafka.

В OpenAPI метод описывается внутри объекта paths, где ключ — это путь, а внутри — HTTP-метод (get, post, put, delete и т.д.). Рассмотрим пример метода POST для создания пользователя:

Здесь описан POST метод по пути /users, который принимает JSON с именем и email, и возвращает 201 при успешном создании с объектом пользователя.

Для хранения денежных сумм лучше использовать тип данных с фиксированной точностью, например, decimal или numeric (в зависимости от языка и СУБД). Эти типы хранят числа с точным представлением десятичных дробей и не подвержены ошибкам округления, характерным для чисел с плавающей точкой (float, double).

Пример на Python с использованием decimal:

В базах данных, например, в PostgreSQL, для денежных сумм используют тип numeric(precision, scale), где precision — общее количество цифр, а scale — количество цифр после запятой.

В JSON обычный массив — это упорядоченный список значений, индексируемый числовыми индексами, например:

Ассоциативный массив в JSON представлен объектом — набором пар "ключ-значение", где ключи — строки, а значения могут быть любыми JSON-типами:

Таким образом, обычный массив — это список элементов по порядку, а ассоциативный массив (объект) — коллекция именованных значений.

User Story Mapping — это методика, которая помогает структурировать и визуализировать функциональность продукта с точки зрения пользователя. Для приложения настройки гитары можно разложить задачу следующим образом:

Определить основные цели пользователя (эпики):

Настроить гитару

Сохранить настройки

Просмотреть историю настроек

Получить помощь или инструкции

Настроить гитару

Сохранить настройки

Разбить каждую цель на конкретные пользовательские истории:

Настроить гитару:

Выбрать тип гитары (акустическая, электрическая)

Выбрать строй (стандартный, альтернативный)

Настроить каждую струну по отдельности

Сохранить настройки:

Сохранить текущий строй под именем

Редактировать сохранённые настройки

Просмотреть историю настроек:

Отобразить список предыдущих настроек

Восстановить выбранную настройку

Получить помощь или инструкции:

Просмотреть руководство по настройке

Получить советы по улучшению звучания

Настроить гитару:

Расположить истории по приоритету и этапам:

Сначала реализовать базовую настройку струн

Затем добавить сохранение и загрузку настроек

Потом расширить функционал помощи и инструкций

Такой подход помогает видеть полный путь пользователя и планировать релизы по приоритетам.

Требование «не перекидывать с проекта на проект» означает, что сотрудник должен сосредоточиться на одном проекте и не переключаться между несколькими одновременно. Это связано с тем, что постоянное переключение контекста снижает эффективность и качество работы, увеличивает время на адаптацию и может привести к ошибкам.

Такой подход помогает глубже погружаться в детали конкретного проекта, лучше понимать бизнес-требования и технические нюансы, а также строить более стабильные коммуникации внутри команды.

Это не значит, что принципиально нельзя работать на нескольких проектах, но в данном случае предпочтение отдается фокусу на одном, чтобы обеспечить максимальную отдачу и качество результата.

Для сущностей «Клиент», «Заказ», «Товар» и «Платёж» можно предложить следующую структуру данных и связи:

Клиент — основная сущность, содержит информацию о покупателе (ID, имя, контакты).

Заказ — связан с одним Клиентом (один-ко-многим), содержит данные о заказе (ID, дата, статус).

Товар — описывает продукт (ID, название, цена, описание).

Платёж — связан с одним Заказом (один-ко-одному или один-ко-многим, если частичная оплата), содержит информацию о сумме, дате и способе оплаты.

Связи:

Клиент 1:N Заказ

Заказ N:M Товар (через промежуточную таблицу «Позиции заказа» с количеством и ценой)

Заказ 1:N Платёж

Выбор модели хранения:

Реляционная база данных (например, PostgreSQL) подходит для таких данных, так как она хорошо моделирует связи между сущностями, обеспечивает целостность данных и поддерживает сложные запросы.

Использование нормализации данных позволяет избежать дублирования и упрощает обновление информации.

Промежуточная таблица для связи Заказ-Товар позволяет хранить количество каждого товара в заказе и цену на момент покупки.

Пример таблиц:

clients(id PK, name, contact_info)

orders(id PK, client_id FK, order_date, status)

products(id PK, name, price, description)

order_items(order_id FK, product_id FK, quantity, price)

payments(id PK, order_id FK, amount, payment_date, method)

Такой подход обеспечивает гибкость, масштабируемость и удобство работы с данными.

При успешном удалении ресурса через HTTP DELETE обычно возвращается код 204 No Content — это означает, что запрос выполнен успешно, и тело ответа пустое.

Если попытаться удалить ресурс, который уже удалён или не существует, то возможны варианты:

404 Not Found — если сервер сообщает, что ресурс не найден.

204 No Content — некоторые API считают удаление идемпотентным и возвращают 204, даже если ресурс уже отсутствует.

Идея в том, что DELETE должен быть идемпотентным: повторный вызов не должен приводить к ошибке, поэтому 204 или 404 — оба приемлемы, но чаще рекомендуют 204 для удобства клиента.

В ближайший год-два я планирую углублять свои знания в области системного анализа, изучать современные методологии и инструменты, такие как UML, BPMN, а также улучшать навыки коммуникации с командой и заказчиками. В дальнейшем хочу развиваться в сторону бизнес-анализа и управления проектами, чтобы лучше понимать потребности бизнеса и эффективно трансформировать их в технические требования.

Apache Kafka использует модель публикации-подписки (publish-subscribe) с распределённым журналом сообщений. В ней продюсеры (производители) публикуют сообщения в топики, которые разбиты на партиции. Консьюмеры (потребители) читают сообщения из этих партиций, при этом каждый консьюмер может читать сообщения независимо, обеспечивая масштабируемость и отказоустойчивость.

Основные особенности модели Kafka:

Сообщения упорядочены внутри партиций.

Консьюмеры могут читать сообщения с любого смещения (offset).

Поддерживается как модель очереди (один консьюмер читает партицию), так и модель публикации-подписки (несколько консьюмеров читают из разных групп).

Таким образом, Kafka сочетает в себе модель очереди сообщений и модель публикации-подписки с возможностью масштабирования и высокой производительностью.

Да, опыт проектирования логических моделей данных с использованием ER-диаграмм был.

ER-диаграммы помогают визуализировать сущности, их атрибуты и связи между ними, что облегчает понимание структуры данных и требований к базе.

Например, при проектировании системы управления заказами создавались сущности "Клиент", "Заказ", "Товар" с соответствующими связями (один клиент может иметь много заказов, заказ содержит несколько товаров). Это позволяло выявить ключевые поля и ограничения, а также подготовить основу для физического проектирования базы данных.

От системного аналитика на уровне middle обычно ожидается проработка интеграций с учетом следующих аспектов:

JSON-контракты: четкое описание структуры запросов и ответов, обязательных и опциональных полей, типов данных.

Коды ошибок: определение набора возможных ошибок, их кодов и описаний для корректной обработки на стороне клиента.

Идемпотентность: указание, какие операции можно повторять без изменения результата, чтобы избежать дублирования при сбоях.

SLA (Service Level Agreement): базовые требования по времени отклика и доступности сервиса, чтобы согласовать ожидания между командами.

Таким образом, аналитик должен обеспечить ясность и полноту технических требований для разработчиков и тестировщиков, чтобы интеграция была надежной и предсказуемой.

В архитектуре брокера сообщений выделяют несколько ключевых участников и компонентов:

Производители (Producers) — приложения или сервисы, которые отправляют сообщения в брокер.

Потребители (Consumers) — приложения или сервисы, которые получают и обрабатывают сообщения из брокера.

Брокер сообщений (Message Broker) — центральный компонент, который принимает, хранит и маршрутизирует сообщения от производителей к потребителям.

Очереди (Queues) — структуры данных внутри брокера, где временно хранятся сообщения до их доставки потребителям.

Топики (Topics) — используются в моделях публикации-подписки (pub/sub), где сообщения публикуются в топик и доставляются всем подписчикам.

Подписчики (Subscribers) — в модели pub/sub подписываются на топики для получения сообщений.

Маршрутизаторы (Routers) — компоненты, которые определяют правила маршрутизации сообщений (например, фильтрация, трансформация).

Менеджеры транзакций и подтверждений (Ack/Nack) — обеспечивают надежность доставки сообщений, подтверждая получение.

Таким образом, брокер сообщений обеспечивает асинхронную коммуникацию между распределёнными системами, позволяя им обмениваться данными через посредника, который управляет очередями, топиками и доставкой сообщений.

Этот вопрос относится к личной информации и зависит от конкретного человека. В рамках технического собеседования лучше ответить честно и кратко, например: "В настоящее время я работаю в Mars" или "Я уже покинул Mars и ищу новые возможности".

На практике я работал с разными видами требований:

Функциональные требования — описывают, что система должна делать, какие функции реализовывать. Например, возможность регистрации пользователя или обработка платежей.

Нефункциональные требования — определяют качество системы: производительность, безопасность, удобство использования.

Бизнес-требования — отражают цели и задачи бизнеса, которые должна поддерживать система.

Технические требования — ограничения и спецификации по технологиям, интеграциям, архитектуре.

Пользовательские требования — ожидания и потребности конечных пользователей.

В процессе работы важно уметь выявлять, документировать и согласовывать эти требования с заинтересованными сторонами, чтобы обеспечить успешную реализацию проекта.

Требование, что приложение должно работать только на территории РФ, относится к категории географических или территориальных ограничений. Это может быть связано с юридическими, нормативными или политическими причинами, например, соблюдением законодательства о локализации данных, ограничениями по экспорту технологий или политикой компании.

В терминах требований это можно классифицировать как ограничение (constraint) или нефункциональное требование, влияющее на архитектуру и инфраструктуру приложения, например, выбор серверов, настройка геоблокировок, контроль доступа по IP и т.п.

В моей практике задачи ставились различным членам команды в зависимости от их ролей и компетенций. Обычно это были:

Разработчики — для реализации функциональных требований и исправления багов.

Тестировщики — для проверки качества и проведения тестирования.

Аналитики — для уточнения требований и подготовки документации.

Дизайнеры — для создания макетов и UI/UX решений.

Менеджеры проектов — для координации процессов и контроля сроков.

При постановке задач я старался четко формулировать цели, критерии приемки и приоритеты, чтобы обеспечить понимание и эффективное выполнение.

Для реализации кэшбэка в банковском приложении можно рассмотреть несколько вариантов:

Процент от суммы покупки — при каждой транзакции рассчитывается процент, который возвращается на счет клиента.

Категорийный кэшбэк — повышенный кэшбэк для определённых категорий товаров или услуг.

Промо-акции и бонусы — временные акции с повышенным кэшбэком.

Накопительный кэшбэк — кэшбэк накапливается и может быть использован позже или обменян на бонусы.

Технически:

В базе данных хранить правила кэшбэка и историю начислений.

При обработке транзакции вычислять сумму кэшбэка по заданным правилам.

Автоматически или по запросу зачислять кэшбэк на счет клиента.

Можно реализовать через микросервис, который слушает события транзакций и рассчитывает кэшбэк, либо встроить логику в основной сервис обработки платежей.

Я проектировал различные типы приложений:

Веб-приложения: как одностраничные приложения (SPA) с использованием React и Angular, так и многостраничные с серверной генерацией.

Мобильные приложения: кроссплатформенные на Flutter и нативные для Android и iOS.

Десктопные приложения: с использованием Electron для кроссплатформенных решений и WPF для Windows.

Каждый тип требует учета специфики пользовательского опыта, архитектуры и технологий.

Callback — это функция, которая передаётся в другую функцию в качестве аргумента и вызывается после завершения определённого действия или события. Основная роль callback — обеспечить асинхронное выполнение кода, позволяя программе не блокироваться и реагировать на события, например, завершение загрузки данных или пользовательское действие.

Пример на JavaScript:

В этом примере callback-функция вызывается после имитации асинхронной операции (загрузка данных). Это позволяет обработать результат, когда он готов.

На фронтенде (веб и мобильные приложения) используются разные уровни кэша для ускорения загрузки и снижения нагрузки:

HTTP-кэш браузера — хранит ответы на HTTP-запросы (HTML, CSS, JS, изображения) согласно заголовкам Cache-Control, ETag и др.

Service Worker Cache (Cache API) — позволяет приложению самостоятельно управлять кэшем, например, для офлайн-режима.

LocalStorage / SessionStorage — хранение небольших данных на стороне клиента, не является кэшем в классическом смысле, но может использоваться для кэширования данных.

IndexedDB — более сложное хранилище для больших объемов структурированных данных, используется для кэширования данных приложений.

Кэш мобильных приложений — на уровне платформы (iOS, Android) приложения могут использовать собственные механизмы кэширования, например, SQLite, файловую систему или встроенные кэши HTTP-клиентов.

Эти механизмы помогают уменьшить время загрузки, снизить трафик и обеспечить работу приложения в офлайн-режиме.

Идемпотентность платежей означает, что повторный запрос на оплату с теми же параметрами не приведёт к повторному списанию средств.

Проблема двойной оплаты возникает из-за повторных запросов (например, из-за сетевых сбоев или повторного нажатия кнопки).

Решения:

Использование уникального идентификатора транзакции (idempotency key), который клиент генерирует и отправляет с запросом.

На сервере сохраняется статус транзакции по этому ключу: если запрос с таким ключом уже обработан, повторная обработка не происходит, возвращается результат первой операции.

В базе данных транзакции фиксируются с этим ключом, что предотвращает дублирование.

Пример:

Клиент отправляет платеж с idempotency_key = "abc123".

Сервер проверяет, есть ли запись с "abc123".

Если нет — обрабатывает платеж и сохраняет результат.

Если есть — возвращает сохранённый результат без повторного списания.

Таким образом достигается безопасность от двойных оплат.

В BPMN (Business Process Model and Notation) токен — это абстрактный элемент, который символизирует поток управления или процессный поток внутри модели процесса. Токен перемещается по элементам диаграммы (событиям, задачам, шлюзам), отражая текущее состояние выполнения процесса.

Когда процесс запускается, токен появляется в начальном событии и перемещается по последовательности потоков, активируя задачи и переходя через шлюзы. Таким образом, токен помогает визуализировать и отслеживать ход выполнения бизнес-процесса.

На проекте Дом.РФ дорабатывались следующие ключевые фичи:

Интеграция с внешними системами для получения актуальных данных по недвижимости и ипотеке.

Улучшение пользовательского интерфейса для удобства поиска и фильтрации объектов.

Оптимизация процессов обработки заявок и документооборота.

Внедрение механизмов аналитики и отчетности для мониторинга эффективности сервисов.

Автоматизация бизнес-процессов, связанных с регистрацией и сопровождением сделок.

Эти доработки позволили повысить качество сервиса, ускорить обработку данных и улучшить взаимодействие с пользователями и партнерами.

Задачи обычно планируются на спринты или итерации, чаще всего на 1-2 недели. В начале планирования участвуют системный аналитик, продуктовый менеджер, разработчики и тестировщики. Задачи приходят в виде требований, user stories или технических заданий, часто оформленных в системе управления задачами (Jira, Trello и др.). Аналитик уточняет детали с заказчиком или бизнес-аналитиком, согласовывает приоритеты с продакт-менеджером и передает задачи команде разработки. В процессе общения важны встречи (планирование, демо, ретроспектива), а также постоянный обмен информацией через мессенджеры и документацию.

Чтобы оставаться вовлечённым и не утомляться на работе, важно соблюдать баланс между нагрузкой и отдыхом. Рекомендуется:

Делать регулярные перерывы, чтобы избежать переутомления.

Ставить перед собой чёткие, достижимые цели, чтобы видеть прогресс.

Вовлекаться в интересные задачи, которые стимулируют развитие и мотивацию.

Поддерживать коммуникацию с коллегами для обмена идеями и поддержки.

Следить за здоровьем: правильное питание, сон и физическая активность помогают сохранять энергию.

Такой подход помогает поддерживать высокий уровень вовлечённости и снижает риск профессионального выгорания.

В перечисленных проблемах структуры SRS (Software Requirements Specification) документа нарушены несколько принципов, но ключевой из них — это отсутствие четкости и структурированности требований, а также нарушение стандарта IEEE 830.

Основные нарушения:

Отсутствие процесса управления изменениями требований — нарушает принцип управления изменениями, что критично для поддержания актуальности документа.

Нечеткие формулировки требований — нарушают принцип ясности и однозначности, что может привести к неправильной реализации.

Отсутствие разделения функциональных и нефункциональных требований — нарушает принцип структурирования требований для удобства понимания и реализации.

Отсутствие ответственных за функциональные блоки — нарушает принцип распределения ответственности, что затрудняет коммуникацию и контроль.

Отсутствие разделов для будущих доработок — снижает гибкость документа и возможность его расширения.

Несоответствие стандарту IEEE 830 — стандарт описывает структуру и содержание SRS, нарушение которого ведет к неполноте и некачественному документу.

Таким образом, основной принцип, нарушенный в структуре SRS — это принцип четкости, структурированности и управляемости требований, а также соответствия установленным стандартам (IEEE 830). Это приводит к снижению качества документа и рискам в процессе разработки.

Основное различие между бизнес-аналитиком и системным аналитиком заключается в фокусе их работы и уровне детализации задач.

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

Системный аналитик фокусируется на технической стороне реализации требований. Он переводит бизнес-требования в технические спецификации, проектирует архитектуру системы, описывает функциональные и нефункциональные требования, взаимодействует с разработчиками и тестировщиками. Его задача — обеспечить, чтобы система соответствовала требованиям и была реализуема с технической точки зрения.

Проще говоря, бизнес-аналитик отвечает за "что и зачем нужно сделать", а системный аналитик — за "как это реализовать".

SOAP и REST — это разные подходы к организации взаимодействия между системами:

SOAP (Simple Object Access Protocol): протокол с жёстко заданным форматом сообщений на XML, поддерживает стандарты безопасности, транзакций и надежности. Использует WSDL для описания сервисов. Подходит для сложных корпоративных интеграций.

REST (Representational State Transfer): архитектурный стиль, использующий стандартные HTTP-методы (GET, POST, PUT, DELETE) и форматы данных (JSON, XML). Более легковесный и простой, широко применяется в веб-сервисах и мобильных приложениях.

Ключевые отличия:

SOAP — протокол, REST — архитектурный стиль.

SOAP требует XML, REST поддерживает разные форматы.

SOAP сложнее в реализации, REST проще и гибче.

Пример запроса REST:

Пример SOAP-запроса — XML-сообщение с определённой структурой.

Для рисования sequence-диаграмм часто используют инструменты типа PlantUML, Visual Paradigm, Lucidchart или draw.io. PlantUML особенно удобен, так как позволяет описывать диаграммы текстом и поддерживает фреймы (frames) для группировки сценариев.

Чтобы отобразить несколько сценариев (например, успех, ошибки, таймаут) на одной диаграмме, используют фреймы с ключевым словом alt (альтернативы) или opt (опциональные блоки). Каждый фрейм соответствует отдельному сценарию и визуально отделяется рамкой с подписью.

Пример на PlantUML:

Такой подход позволяет компактно показать все варианты поведения системы в одном месте.

Да, занимался. В Jira для удобства управления задачами и контроля прогресса часто делю большие user story на более мелкие задачи (tasks) и подзадачи (subtasks). Это помогает распределить работу между командой, оценить время и ресурсы, а также отслеживать выполнение поэтапно. Например, story «Реализовать авторизацию» можно разбить на задачи: «Создать UI формы», «Настроить backend аутентификацию», «Написать тесты», а внутри задачи «Создать UI формы» сделать подзадачи для разных экранов.

OpenAPI — это спецификация для описания REST API, которая использует JSON или YAML для структурирования описания API. В OpenAPI описание данных (payload) часто задаётся с помощью схем JSON Schema, что позволяет точно определить структуру, типы и ограничения данных, которые принимает или возвращает API.

То есть JSON Schema служит языком описания структуры JSON-объектов, а OpenAPI использует эти схемы для формализации контрактов API. Это позволяет автоматически генерировать документацию, валидировать запросы и ответы, а также создавать клиентские и серверные SDK.

Пример фрагмента OpenAPI с описанием JSON-схемы:

Да, в BPMN-схеме может быть несколько завершающих событий (End Events). Это нормально и часто используется для моделирования процессов, которые могут завершаться разными способами.

Каждое завершающее событие обозначает отдельный путь завершения процесса. Например, процесс может завершиться успешно, с ошибкой или отменой — для каждого варианта можно использовать своё завершающее событие.

Наличие нескольких End Events помогает:

Чётко обозначить разные сценарии завершения.

Упростить логику процесса.

Улучшить читаемость и поддержку модели.

Важно, чтобы все возможные пути процесса вели к одному из завершающих событий, иначе процесс может остаться незавершённым.

Идемпотентные HTTP методы — это такие, которые можно вызывать несколько раз подряд без изменения результата после первого вызова.

Идемпотентные методы:

GET — получение ресурса, не изменяет состояние сервера.

PUT — обновление ресурса, повторные вызовы с одним и тем же телом дадут одинаковый результат.

DELETE — удаление ресурса, повторные вызовы не изменят результат (ресурс уже удалён).

HEAD — как GET, но без тела ответа.

OPTIONS — запрос поддерживаемых методов.

Неидемпотентные методы:

POST — создание ресурса или выполнение операции, каждый вызов может создавать новый ресурс или изменять состояние.

Пример:

Если вызвать PUT /user/123 с одними и теми же данными несколько раз, состояние пользователя не изменится после первого обновления.

Если вызвать POST /orders несколько раз, будет создано несколько заказов.

Для системы управления задачами с учётом требований можно выделить следующие основные акторы и варианты использования:

Акторы: Пользователь, Система уведомлений

Варианты использования:

Создание задачи

Изменение статуса задачи (статусная модель)

Привязка задачи к проекту

Добавление/удаление тегов у задачи

Получение уведомлений о изменениях

Создание задачи

Примерная структура Use Case диаграммы:

Каждая задача имеет атрибут "статус", который меняется в рамках статусной модели (например: "Новая", "В работе", "Завершена"). Теги позволяют классифицировать задачи, а проекты группируют их по контексту. Уведомления информируют пользователей о важных изменениях.

Параметры производительности обычно измеряются в следующих единицах:

Время — миллисекунды (ms), секунды (s) и т.п. Например, время отклика системы, время выполнения запроса.

Пропускная способность (Throughput) — количество операций или транзакций в единицу времени (запросов в секунду, операций в минуту).

Загрузка ресурсов — процент использования CPU (%), объем используемой памяти (МБ, ГБ), нагрузка на диск (IOPS), сетевой трафик (Мбит/с).

Время ожидания (Latency) — задержка между запросом и ответом, измеряется в миллисекундах.

Например, при анализе производительности веб-приложения можно измерять время отклика страниц в миллисекундах и количество запросов в секунду, которые система способна обработать без деградации.

В моей практике были интеграции с различными системами и сервисами, включая:

ERP-системы (например, SAP, 1С) для обмена данными о заказах и остатках.

CRM-системы (например, Salesforce) для синхронизации клиентской информации.

Платежные шлюзы (например, Stripe, PayPal) для обработки онлайн-платежей.

Веб-сервисы и API сторонних поставщиков для получения данных (например, геолокация, курсы валют).

Интеграции через REST и SOAP API, а также через очереди сообщений (RabbitMQ, Kafka).

Каждая интеграция требовала анализа бизнес-процессов, проектирования обмена данными и обеспечения надежности и безопасности взаимодействия.

DataFrame — это структура данных, широко используемая в аналитике и обработке данных, особенно в библиотеках Python, таких как pandas. Она представляет собой двумерную таблицу с метками строк и столбцов, где можно хранить данные разных типов (числа, строки, даты и т.д.). DataFrame удобен для фильтрации, группировки, агрегации и трансформации данных.

Пример создания DataFrame в pandas:

Вывод:

Количество партиций в Kafka определяется при создании топика и может быть изменено позднее с помощью административных инструментов.

Чтобы узнать текущее количество партиций для конкретного топика, можно использовать команду Kafka CLI:

В выводе будет указано количество партиций и их распределение по брокерам.

Также можно получить информацию программно через AdminClient API, вызвав метод для описания топика и посмотрев количество партиций.

На sequence-диаграмме синхронное взаимодействие отображается сплошной стрелкой с заполненной стрелочной головкой, указывающей от вызывающего объекта к вызываемому. Это означает, что вызывающий объект ожидает завершения вызова, прежде чем продолжить выполнение.

Асинхронное взаимодействие показывается стрелкой с открытой (пустой) стрелочной головкой. Это указывает, что вызывающий объект не ждет ответа и продолжает работу сразу после отправки сообщения.

Пример:

А если вопрос прозвучит не так, как вы готовились?

Так бывает чаще всего. ИзиСобес слышит вопрос интервьюера и подсказывает ответ прямо во время разговора — его не видно ни в Zoom, ни при демонстрации экрана.

Посмотреть ИзиСобес