Вопрос дня
Тема: Cогласованное хеширование
При хешировании по модулю добавление одной базы данных в кластер из 10 баз данных потребует перемещения примерно 90% данных.
Ответ: Верно
При переходе от hash(key) % 10 к hash(key) % 11 примерно 10/11 ключей, около 90%, будут указывать на другую базу данных. На месте останутся только ключи, для которых результат случайно совпадет при обеих операциях по модулю. Поэтому хеширование по модулю плохо подходит для динамических кластеров.
Тема: Cогласованное хеширование
При хешировании по модулю добавление одной базы данных в кластер из 10 баз данных потребует перемещения примерно 90% данных.
2.6K
Тема: Кэширование
Верно ли следующее утверждение?
CDN могут кэшировать только статические файлы, такие как изображения, видео и JavaScript. Ответы API и HTML-страницы они кэшировать не могут.
Ответ: Неверно
Современные CDN, такие как Cloudflare, Fastly и Akamai, умеют кэшировать намного больше, чем статические файлы. Они могут кэшировать публичные ответы API, HTML-страницы и даже выполнять логику на edge-узлах. Но самый частый и заметный сценарий для CDN все равно доставка медиа.
Верно ли следующее утверждение?
CDN могут кэшировать только статические файлы, такие как изображения, видео и JavaScript. Ответы API и HTML-страницы они кэшировать не могут.
Тема: Шардирование
Как можно уменьшить число межшардовых запросов, если часто нужно читать посты вместе с данными пользователя?
A. Всегда опрашивать все шарды
B. Денормализовать данные и хранить данные постов на шарде пользователя
C. Создать отдельную нешардированную таблицу постов в централизованной базе
D. Использовать двухфазный коммит для всех запросов
Ответ: B. Денормализовать данные и хранить данные постов на шарде пользователя
Денормализация означает дублирование данных между шардами. Это увеличивает объем данных и усложняет обновления, зато позволяет читать все нужное из одного шарда. Например, если хранить часть информации о постах на шарде пользователя, запрос "посты пользователя" пойдет в один шард, а не в несколько.
Как можно уменьшить число межшардовых запросов, если часто нужно читать посты вместе с данными пользователя?
A. Всегда опрашивать все шарды
B. Денормализовать данные и хранить данные постов на шарде пользователя
C. Создать отдельную нешардированную таблицу постов в централизованной базе
D. Использовать двухфазный коммит для всех запросов
Тема: Основы сетей
Верно ли следующее утверждение?
Паттерн circuit breaker снижает риск каскадных сбоев, временно блокируя запросы к упавшим сервисам.
Ответ: Верно
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'.
Когда в REST API стоит использовать path-параметры, а когда query-параметры?
A. Всегда использовать path-параметры из-за лучшей производительности и кэширования
B. Использовать path-параметры, когда они идентифицируют ресурс
C. Всегда использовать query-параметры из-за максимальной гибкости API
D. Использовать их взаимозаменяемо
Тема: Кэширование
Пользователь обновляет профиль и ожидает сразу увидеть изменение после обновления страницы. Как лучше обеспечить согласованность кэша?
A. Всегда использовать write-through, чтобы держать кэш и базу данных синхронизированными
B. Удалить запись из кэша, чтобы следующее чтение забрало свежие данные
C. Дождаться естественного истечения TTL
D. Обновлять кэш и базу данных в распределенной транзакции
Ответ: B
Инвалидация кэша при записи - самый практичный подход. Когда данные обновились, сразу удаляем соответствующую запись из кэша. Следующее чтение получит промах, возьмет свежие данные из базы и снова заполнит кэш. Это проще и надежнее, чем пытаться поддерживать идеальную согласованность.
Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Пользователь обновляет профиль и ожидает сразу увидеть изменение после обновления страницы. Как лучше обеспечить согласованность кэша?
A. Всегда использовать write-through, чтобы держать кэш и базу данных синхронизированными
B. Удалить запись из кэша, чтобы следующее чтение забрало свежие данные
C. Дождаться естественного истечения TTL
D. Обновлять кэш и базу данных в распределенной транзакции
Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Тема: Основы сетей
Верно ли следующее утверждение?
В распределенных системах нужно учитывать, что сетевые вызовы иногда завершаются ошибкой или по таймауту.
Ответ: Верно
Сеть по своей природе ненадежна: разрывы кабелей, падение роутеров, перегрузки. Устойчивая распределенная система должна быть к этому готова и обрабатывать сбои с использованием таймаутов, повторных попыток, circuit breakers и плавной деградации.
Почитать подробнее
Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Верно ли следующее утверждение?
В распределенных системах нужно учитывать, что сетевые вызовы иногда завершаются ошибкой или по таймауту.
Почитать подробнее
Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Тема: Цифры, которые нужно знать
Какой порядок величины операций в секунду на один экземпляр может выдерживать современный кэш в памяти?
A. 1 000 операций/с
B. 10 000 операций/с
C. 100 000 операций/с
D. 1 000 000 операций/с
Ответ: C
Современные кэши в памяти, такие как Redis, могут обрабатывать больше 100 000 операций в секунду на один экземпляр. Понимание этой мощности помогает избегать преждевременного масштабирования: многие системы, которым на первый взгляд нужен распределенный кэш, на деле могут работать на одном производительном экземпляре кэша.
Почитать подробнее
Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Какой порядок величины операций в секунду на один экземпляр может выдерживать современный кэш в памяти?
A. 1 000 операций/с
B. 10 000 операций/с
C. 100 000 операций/с
D. 1 000 000 операций/с
Почитать подробнее
Насколько хорошо ты знаешь System Design?
Пройди полный тест абсолютно бесплатно: @nowinterviewbot
Тема: Проектирование API
Верно ли следующее утверждение?
API-ключи хорошо подходят для аутентификации конечных пользователей в мобильных и веб-приложениях.
Ответ: Неверно
API-ключи предназначены для взаимодействия сервисов и доступа разработчиков, а не для аутентификации конечных пользователей. В них нет пользовательского контекста, управления сессиями и обработки срока действия, которые нужны пользовательским приложениям. Для конечных пользователей подходят JWT-токены или аутентификация на основе сессий.
Верно ли следующее утверждение?
API-ключи хорошо подходят для аутентификации конечных пользователей в мобильных и веб-приложениях.
Тема: 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 километров", без проверки каждой строки.
Какой тип пространственного индекса использует расширение 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-деревья могут пропускать проверку большинства файлов при чтении. Это значительно уменьшает необходимое количество чтений с диска.
Какую технику оптимизации LSM-деревья используют, чтобы улучшить производительность чтения?
A. Кэширование всех данных в памяти, чтобы полностью избежать чтений с диска
B. Фильтры Блума, чтобы пропускать нерелевантные файлы
C. Сжатие всех данных
D. Использование хеш-индексов вместо LSM-деревьев
Ответ: B
Фильтры Блума - это вероятностные структуры данных, которые быстро определяют, что ключа точно нет в конкретной SSTable. Благодаря этому LSM-деревья могут пропускать проверку большинства файлов при чтении. Это значительно уменьшает необходимое количество чтений с диска.
Тема: Шардирование
Верно ли следующее утверждение?
Простое хеш-шардирование по модулю, например hash(key) % N shards, позволяет легко добавлять и удалять шарды без значительного перемещения данных.
Ответ: Неверно
Простое хеширование по модулю требует масштабного перераспределения данных при изменении числа шардов. Переход с hash(key) % 4 на hash(key) % 5 меняет шард для большей части записей, поэтому приходится переносить почти все данные. Согласованное хеширование - другой подход: он уменьшает проблему, перемещая данные только с затронутых шардов.
Верно ли следующее утверждение?
Простое хеш-шардирование по модулю, например hash(key) % N shards, позволяет легко добавлять и удалять шарды без значительного перемещения данных.
Ответ: Неверно
Простое хеширование по модулю требует масштабного перераспределения данных при изменении числа шардов. Переход с hash(key) % 4 на hash(key) % 5 меняет шард для большей части записей, поэтому приходится переносить почти все данные. Согласованное хеширование - другой подход: он уменьшает проблему, перемещая данные только с затронутых шардов.
Тема: Цифры, которые нужно знать
Что обычно не становится первым узким местом в современных серверах приложений?
A. Объем памяти
B. Загрузка CPU
C. Пропускная способность сети
D. Задержка ответа
Ответ: A
Для современных серверов приложений 64-512 ГБ RAM уже обычный диапазон, поэтому объем памяти редко становится первым ограничением. Чаще узким местом становится загрузка CPU, еще до того как система упрется в память, сеть или задержку.
Что обычно не становится первым узким местом в современных серверах приложений?
A. Объем памяти
B. Загрузка CPU
C. Пропускная способность сети
D. Задержка ответа
Ответ: A
Для современных серверов приложений 64-512 ГБ RAM уже обычный диапазон, поэтому объем памяти редко становится первым ограничением. Чаще узким местом становится загрузка CPU, еще до того как система упрется в память, сеть или задержку.
Тема: CAP теорема
Верно ли следующее утверждение?
Для операции бронирования места в системе покупки билетов согласованность важнее доступности.
Ответ: Верно
Операция бронирования места должна быть согласованной, чтобы предотвратить двойное бронирование. Лучше отклонить запрос на бронирование во время сетевого разделения, чем продать одно и то же место дважды. При этом просмотр доступных событий может отдавать приоритет доступности и использовать согласованность в конечном счете.
Верно ли следующее утверждение?
Для операции бронирования места в системе покупки билетов согласованность важнее доступности.
Ответ: Верно
Операция бронирования места должна быть согласованной, чтобы предотвратить двойное бронирование. Лучше отклонить запрос на бронирование во время сетевого разделения, чем продать одно и то же место дважды. При этом просмотр доступных событий может отдавать приоритет доступности и использовать согласованность в конечном счете.
Тема: API Gateway
Что является примером управляемого сервиса API Gateway?
A. Kong
B. Express Gateway
C. AWS API Gateway
D. Tyk
Ответ: C
AWS API Gateway - полностью управляемый сервис от облачного провайдера. Kong, Express Gateway и Tyk - open-source решения, которые требуют больше настройки и управления.
Что является примером управляемого сервиса API Gateway?
A. Kong
B. Express Gateway
C. AWS API Gateway
D. Tyk
Ответ: C
AWS API Gateway - полностью управляемый сервис от облачного провайдера. Kong, Express Gateway и Tyk - open-source решения, которые требуют больше настройки и управления.
Тема: Основы сетей
Какая стратегия повторных вызовов снижает риск перегрузить восстанавливающиеся сервисы?
A. Экспоненциальный backoff
B. Немедленный повтор без паузы
C. Фиксированные интервалы
D. Без повторов
Ответ: A
Экспоненциальный backoff увеличивает паузу между повторами и разгружает сервис, который восстанавливается после сбоя. Jitter распределяет время повторного вызова у разных клиентов и снижает риск синхронного наплыва, когда все обращаются к сервису в один момент времени и мешают ему восстановиться.
Какая стратегия повторных вызовов снижает риск перегрузить восстанавливающиеся сервисы?
A. Экспоненциальный backoff
B. Немедленный повтор без паузы
C. Фиксированные интервалы
D. Без повторов
Ответ: A
Экспоненциальный backoff увеличивает паузу между повторами и разгружает сервис, который восстанавливается после сбоя. Jitter распределяет время повторного вызова у разных клиентов и снижает риск синхронного наплыва, когда все обращаются к сервису в один момент времени и мешают ему восстановиться.
Тема: Кэширование
Какая политика вытеснения удаляет элемент, к которому дольше всего не обращались?
A. LFU
B. LRU
C. FIFO
D. TTL
Ответ: B
LRU (Least Recently Used) вытесняет элемент, к которому дольше всего не обращались. Политика отслеживает порядок обращений и удаляет наименее недавно использованный элемент. Ее часто используют по умолчанию, потому что она хорошо подходит для нагрузок, где недавно использованные данные с высокой вероятностью понадобятся снова.
Какая политика вытеснения удаляет элемент, к которому дольше всего не обращались?
A. LFU
B. LRU
C. FIFO
D. TTL
Ответ: B
LRU (Least Recently Used) вытесняет элемент, к которому дольше всего не обращались. Политика отслеживает порядок обращений и удаляет наименее недавно использованный элемент. Ее часто используют по умолчанию, потому что она хорошо подходит для нагрузок, где недавно использованные данные с высокой вероятностью понадобятся снова.
Тема: Масштабирование чтения
В чем ключевая польза объединения одинаковых запросов при работе с горячими ключами?
A. Снижает использование памяти в кэшах за счет удаления дублей сохраненных записей между узлами
B. Ограничивает нагрузку на серверную часть до N запросов, по одному на сервер
C. Улучшает долю попаданий в кэш
D. Устраняет необходимость в сбросе кэша
Ответ: B
Объединение одинаковых запросов гарантирует, что даже если миллионы пользователей одновременно хотят одни и те же данные, серверная часть получит только N запросов: по одному на каждый сервер приложения, выполняющий объединение.
В чем ключевая польза объединения одинаковых запросов при работе с горячими ключами?
A. Снижает использование памяти в кэшах за счет удаления дублей сохраненных записей между узлами
B. Ограничивает нагрузку на серверную часть до N запросов, по одному на сервер
C. Улучшает долю попаданий в кэш
D. Устраняет необходимость в сбросе кэша
Ответ: B
Объединение одинаковых запросов гарантирует, что даже если миллионы пользователей одновременно хотят одни и те же данные, серверная часть получит только N запросов: по одному на каждый сервер приложения, выполняющий объединение.