System Design | Вопросы на собеседовании
85 subscribers
10 links
Download Telegram
Вопрос дня

Тема: Cогласованное хеширование

При хешировании по модулю добавление одной базы данных в кластер из 10 баз данных потребует перемещения примерно 90% данных.

Ответ: Верно

При переходе от hash(key) % 10 к hash(key) % 11 примерно 10/11 ключей, около 90%, будут указывать на другую базу данных. На месте останутся только ключи, для которых результат случайно совпадет при обеих операциях по модулю. Поэтому хеширование по модулю плохо подходит для динамических кластеров.
2.6K
Тема: Кэширование

Верно ли следующее утверждение?

CDN могут кэшировать только статические файлы, такие как изображения, видео и JavaScript. Ответы API и HTML-страницы они кэшировать не могут.

Ответ: Неверно

Современные CDN, такие как Cloudflare, Fastly и Akamai, умеют кэшировать намного больше, чем статические файлы. Они могут кэшировать публичные ответы API, HTML-страницы и даже выполнять логику на edge-узлах. Но самый частый и заметный сценарий для CDN все равно доставка медиа.
Тема: Шардирование

Как можно уменьшить число межшардовых запросов, если часто нужно читать посты вместе с данными пользователя?

A. Всегда опрашивать все шарды
B. Денормализовать данные и хранить данные постов на шарде пользователя
C. Создать отдельную нешардированную таблицу постов в централизованной базе
D. Использовать двухфазный коммит для всех запросов

Ответ: B. Денормализовать данные и хранить данные постов на шарде пользователя

Денормализация означает дублирование данных между шардами. Это увеличивает объем данных и усложняет обновления, зато позволяет читать все нужное из одного шарда. Например, если хранить часть информации о постах на шарде пользователя, запрос "посты пользователя" пойдет в один шард, а не в несколько.
Тема: Основы сетей

Верно ли следующее утверждение?

Паттерн circuit breaker снижает риск каскадных сбоев, временно блокируя запросы к упавшим сервисам.

Ответ:     Верно

Circuit breaker следит за работоспособностью сервиса и переходит в открытое состояние, когда ошибок слишком много: новые запросы временно не идут в проблемный сервис, и у него есть время восстановиться. Это предотвращает каскадные сбои и уменьшает ущерб для всей системы.
Тема: Проектирование API

Когда в REST API стоит использовать path-параметры, а когда query-параметры?

A. Всегда использовать path-параметры из-за лучшей производительности и кэширования
B. Использовать path-параметры, когда они идентифицируют ресурс
C. Всегда использовать query-параметры из-за максимальной гибкости API
D. Использовать их взаимозаменяемо

Ответ: B

Path-параметры стоит использовать, когда значение нужно для идентификации ресурса, например '/events/{id}/tickets'. Query-параметры стоит использовать для необязательных фильтров или модификаторов, например '/events?city=МСК&date=2026-01-01'.
Тема: Кэширование

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

A. Всегда использовать write-through, чтобы держать кэш и базу данных синхронизированными
B. Удалить запись из кэша, чтобы следующее чтение забрало свежие данные
C. Дождаться естественного истечения TTL
D. Обновлять кэш и базу данных в распределенной транзакции

Ответ: B

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

Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Тема: Основы сетей

Верно ли следующее утверждение?

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

Ответ:     Верно

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

Почитать подробнее

Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Тема: Цифры, которые нужно знать

Какой порядок величины операций в секунду на один экземпляр может выдерживать современный кэш в памяти?

A. 1 000 операций/с
B. 10 000 операций/с
C. 100 000 операций/с
D. 1 000 000 операций/с

Ответ: C

Современные кэши в памяти, такие как Redis, могут обрабатывать больше 100 000 операций в секунду на один экземпляр. Понимание этой мощности помогает избегать преждевременного масштабирования: многие системы, которым на первый взгляд нужен распределенный кэш, на деле могут работать на одном производительном экземпляре кэша.

Почитать подробнее

Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Тема: Проектирование API

Верно ли следующее утверждение?

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

Ответ: Неверно

API-ключи предназначены для взаимодействия сервисов и доступа разработчиков, а не для аутентификации конечных пользователей. В них нет пользовательского контекста, управления сессиями и обработки срока действия, которые нужны пользовательским приложениям. Для конечных пользователей подходят JWT-токены или аутентификация на основе сессий.
Тема: PostgreSQL

Какой тип пространственного индекса использует расширение PostGIS в PostgreSQL для эффективных геопространственных запросов?

A. B-tree индексы с оптимизацией сканирования по диапазонам
B. Hash-индексы для точного пространственного поиска
C. GIST-индексы с реализацией R-tree
D. GIN-индексы

Ответ: C

PostGIS использует GIST (Generalized Search Tree) индексы, внутри которых применяется R-tree индексирование. R-tree специально спроектированы для геометрических данных и эффективно обрабатывают пространственные запросы, например "найти все точки в радиусе X километров", без проверки каждой строки.
Тема: Индексирование баз данных

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

A. Кэширование всех данных в памяти, чтобы полностью избежать чтений с диска
B. Фильтры Блума, чтобы пропускать нерелевантные файлы
C. Сжатие всех данных
D. Использование хеш-индексов вместо LSM-деревьев

Ответ: B

Фильтры Блума - это вероятностные структуры данных, которые быстро определяют, что ключа точно нет в конкретной SSTable. Благодаря этому LSM-деревья могут пропускать проверку большинства файлов при чтении. Это значительно уменьшает необходимое количество чтений с диска.
Тема: Шардирование

Верно ли следующее утверждение?

Простое хеш-шардирование по модулю, например hash(key) % N shards, позволяет легко добавлять и удалять шарды без значительного перемещения данных.

Ответ: Неверно

Простое хеширование по модулю требует масштабного перераспределения данных при изменении числа шардов. Переход с hash(key) % 4 на hash(key) % 5 меняет шард для большей части записей, поэтому приходится переносить почти все данные. Согласованное хеширование - другой подход: он уменьшает проблему, перемещая данные только с затронутых шардов.
Тема: Цифры, которые нужно знать

Что обычно не становится первым узким местом в современных серверах приложений?

A. Объем памяти
B. Загрузка CPU
C. Пропускная способность сети
D. Задержка ответа

Ответ: A

Для современных серверов приложений 64-512 ГБ RAM уже обычный диапазон, поэтому объем памяти редко становится первым ограничением. Чаще узким местом становится загрузка CPU, еще до того как система упрется в память, сеть или задержку.