RecallDeck
Направление

Подготовка к собеседованию — Rust-разработчик

Колода из 136+ карточек с вопросами для собеседования по направлению «Rust-разработчик» — по темам и уровню сложности, с возвратом ровно перед тем, как вы забудете. Посмотрите несколько карточек ниже, затем войдите, чтобы учить всё направление по расписанию в стиле Anki (SM-2).

136 карточек10 тем

Бесплатно · вход через GitHub · ваш прогресс остаётся с вами.

Что внутри

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

Системный дизайн

29 карточек
Системный дизайн

Поведенческое интервью

35 карточек
Поведенческое интервью

Владение, заимствование и лайфтаймы

12 карточек
Владение и лайфтаймы

Трейты, дженерики и диспетчеризация

11 карточек
Трейты и диспетчеризация

Умные указатели и interior mutability

7 карточек
Умные указатели

Ошибки, коллекции и экосистема

10 карточек
Ошибки и экосистема

Конкурентность: Send/Sync и атомики

8 карточек
Send/Sync и атомики

Async/await и Tokio

10 карточек
Async и Tokio

Unsafe, память и FFI

7 карточек
Unsafe и память

Live coding и прикладные задачи

7 карточек
Live coding

Примеры вопросов

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

Шаг 1. Прояснить требования

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

Функциональные требования — что система делает (фичи):

  • Какие основные сценарии? (например: «сократить ссылку» и «перейти по короткой ссылке»).
  • Кто пользователи? Сколько их? Гео-распределение?
  • Что НЕ входит в скоуп? (аналитика, аутентификация, биллинг — часто можно отбросить, явно проговорив это).

Нефункциональные требования (NFR) — какими свойствами обладает:

  • Масштаб: сколько пользователей / запросов / данных.
  • Доступность (availability): важнее ли «всегда отвечать» или «отвечать корректно»? (CAP).
  • Latency: жёсткие требования (p99 < 100 мс) или нет.
  • Консистентность: допустима ли eventual consistency, или нужна строгая.
  • Durability: можно ли терять данные (логи vs платежи).
  • Read/Write ratio: преобладает чтение или запись.

💡 Задавайте вопросы вслух и фиксируйте ответы — это уже половина оценки. Пример: «Нам нужна аналитика по кликам? Если да — это меняет модель данных. Предположу, что в скоупе только базовый счётчик».

Шаг 2. Оценить масштаб (back-of-the-envelope)

Грубые прикидки, которые определят архитектуру. Считайте вслух, округляйте агрессивно.

Что оценить:

  • QPS (запросов в секунду): средний и пиковый (пик ≈ 2-3× среднего).
  • Объём данных: размер одной записи × число записей × горизонт хранения.
  • Соотношение чтение/запись (read:write) — определяет, нужны ли реплики чтения и кэш.
  • Пропускная способность (bandwidth): QPS × размер ответа.
  • Хранилище (storage): рост в год.

Полезные числа для счёта в уме:

Величина Значение
Секунд в сутки ~86 400 ≈ 10⁵
Месяц ~2.5 млн сек
1M запросов/сутки 12 QPS в среднем
1B запросов/сутки 12 000 QPS

Пример расчёта (URL shortener): 100M новых ссылок/мес → 100M / 2.5M сек ≈ 40 записей/сек. Read:write = 100:1 → 4000 чтений/сек. Размер записи ~500 байт → 100M × 500B = 50 ГБ/мес → 600 ГБ/год → за 10 лет ~6 ТБ.

💡 Вывод из чисел сразу формулируйте: «40 записей/сек — это легко для одной БД. 4000 чтений/сек — добавим кэш и реплики чтения».

Шаг 3. Определить API

Опишите контракт сервиса — это фиксирует функциональность и помогает интервьюеру понять модель. REST/gRPC, основные эндпоинты:

POST /api/v1/urls           {long_url, custom_alias?, ttl?} -> {short_url}
GET  /{short_key}           -> 301/302 redirect

Проговорите: методы, параметры, идемпотентность (POST идемпотентен?), пагинацию для списков (cursor-based, не offset на больших данных), авторизацию (api_key / токен).

Шаг 4. Модель данных и выбор БД

  • Опишите ключевые сущности и связи (таблицы / коллекции).
  • Выберите тип БД и обоснуйте:
    • SQL (Postgres, MySQL): сложные связи, транзакции, строгая консистентность, аналитические запросы, JOIN. Берите по умолчанию, если нет причины не брать.
    • NoSQL key-value / wide-column (DynamoDB, Cassandra): огромный масштаб записи, простой паттерн доступа по ключу, горизонтальное шардирование «из коробки», eventual consistency.
    • Документная (MongoDB): гибкая схема, вложенные документы.
    • In-memory (Redis): кэш, счётчики, rate limiting, очереди, leaderboard.
  • Сразу подумайте о ключе шардирования (по чему партиционируем).

Шаг 5. High-level архитектура

Опишите словами (или схемой) компоненты и поток запроса:

[Client] -> [DNS] -> [Load Balancer] -> [API / App Servers (stateless)]
                                              |-> [Cache (Redis)]
                                              |-> [Database (+ read replicas)]
                                              |-> [Message Queue] -> [Workers]
                                         [CDN] -> [Blob Storage (S3)]

Проведите типичный запрос по этому пути от клиента до БД и обратно.

Load Balancer и Reverse Proxy

  • LB распределяет трафик между инстансами (round-robin, least-connections, consistent hashing). Даёт горизонтальное масштабирование и отказоустойчивость (убирает мёртвые ноды через health checks).
  • L4 (TCP) — быстрее; L7 (HTTP) — умеет роутинг по URL/заголовкам, TLS-терминацию.
  • Reverse proxy (Nginx, Envoy): TLS-терминация, сжатие, кэш, защита бэкенда, единая точка входа.
  • 💡 Приложения держите stateless — тогда LB может слать запрос на любой инстанс. Сессии — в Redis, не в памяти процесса.

Готовы закрепить навсегда?

Первая сессия — меньше минуты. Ваше будущее «я» на собеседовании скажет спасибо.

Другие направления

RecallDeckПодготовка к собеседованию на интервальных повторениях