// день 5 из 7
Бэкенд и инфраструктура
Сеть и API, брокеры, распределённые системы, DevOps, тесты, архитектура.
Сеть и API, брокеры, распределёнка, DevOps, тесты. Вечер — мок бэкенд-секции.
Пока пусто. Ответь на первые вопросы — здесь появится готовность по этапам.
Вечером — мок: Бэкенд-секция: сеть, брокеры, распределёнка
График в роли интервьюера, один вопрос за раз, в конце — отчёт и вердикт для Middle.
Один пробный мок — бесплатно, дальше — Pro или Спринт.
Вопросы
0/60- Что такое паттерн (transactional) outbox/inbox и как он работает?free
- Какие инструменты мониторинга и метрик использовали в production (Prometheus, Zabbix, ELK-стек, Grafana)? Как собираются метрики на проекте?free
- В чём разница между TCP и UDP, как они работают, где применяются?free
- Чем контейнер (контейнеризация) отличается от виртуальной машины (виртуализации)? Что такое Docker?free
- Расскажи про CAP-теорему.
- Расскажи про pprof: как им пользоваться для профилирования? Приходилось ли профилировать Go-программы, какие инструменты для этого существуют (pprof, trace)?
- Какие гарантии доставки есть в Kafka?
- Расскажите про свой опыт работы с Kafka / как применяли её в проекте?
- Чем отличается gRPC от REST (или от HTTP)?
- Что такое top? Что такое load average, почему там три значения и что они означают? Что значит нагрузка/CPU больше 100%?
- Какие паттерны проектирования знаешь и использовал (в т.ч. GoF)? На какие группы они делятся?
- Чем Kafka отличается от RabbitMQ? Когда стоит использовать одно, а когда другое?
- Если консьюмеров больше, чем партиций (или наоборот) — как это повлияет на работу?
- Что такое SOLID? Расскажи про принципы SOLID (по всем буквам).free
- Как в Go реализовано ООП? Есть ли инкапсуляция, наследование, полиморфизм и другие принципы ООП?free
- Какие есть основные компоненты в Kafka? Чем занимается брокер?
- Зачем нужны таймауты в HTTP-запросах и как их подобрать/рассчитать?
- Какие версии HTTP есть и чем они отличаются? (в частности HTTP/1 vs HTTP/2)
- Что такое gRPC? Как он работает, какой формат передачи данных использует, что известно про унарные запросы и стриминг (клиентский, серверный, двунаправленный)?
- Как было устроено/как строили межсервисное взаимодействие на проекте? Какие есть подходы?
- Что такое системный вызов fork()? Что такое зомби-процесс?
- Что такое файловый дескриптор и для чего он используется?
- Какие виды тестов существуют и какие вы писали/использовали на проекте?
- Из каких частей состоит HTTP-запрос?
- Расскажи про DDD (Domain-Driven Design): что это и как применяется?
- Переход от монолита к микросервисам: причина, как переходили, к чему пришли? Какие плюсы у монолита? Какой есть промежуточный стиль между монолитом и микросервисом?
- Какую архитектуру вы в основном используете? Какие архитектурные решения принимали? Приходилось ли проектировать архитектуру?
- Использовали ли чистую (clean) архитектуру на проекте? Через какие сущности проходят данные в clean-архитектуре? Для чего нужны юзкейсы?
- Чем pub/sub отличается от очередей (message queue)?
- Гарантии доставки в Kafka: at most once, at least once, exactly once. Поддерживает ли Kafka exactly-once из коробки, как это обеспечить, и действительно ли exactly once гарантирует отправку ровно одного сообщения?
- Что будет, если консьюмер Kafka упадёт? Что нужно сделать, чтобы масштабировать потребителей, и какие проблемы возникают из-за ребалансировки (rebalancing) при падении консьюмера?
- Что такое идемпотентность в запросах к сервисам?
- Как безопасно изменить/эволюционировать контракт в gRPC (proto-файл) — добавить, удалить или переименовать поле — так, чтобы не сломать клиента, который уже в проде и не обновлён?
- Где хранить proto-файлы (отдельный репозиторий или рядом с сервисом) и как из них генерируется и версионируется Go-код?
- Что такое асинхронное API (асинхронная ручка)? Для чего нужно и как реализовать?
- Что такое паттерн Сага?
- У тебя падает сервис с 5xx-ошибками — как будешь искать причину?
- Чем кооперативная (невытесняющая) многозадачность отличается от вытесняющей? В чём разница между вытесняющим и не вытесняющим планированием ОС?
- Что такое переключение контекста? Из чего состоит процедура смены контекста?
- В чём разница между hardlink и symlink (хард-линк и софт-линк)?
- Какими способами можно посмотреть, какие файлы открыл процесс? Как узнать, какой процесс открыл конкретный файл?
- Как определить, почему тормозит приложение, если это бинарник без логов?
- Что такое под (Pod) в Kubernetes? Можно ли запустить несколько контейнеров в поде?
- Что такое kubelet? За что он отвечает?
- Что такое DNS и как он работает?
- Что происходит, когда вводишь адрес в адресную строку браузера / как HTTP-запрос доходит от клиента до сервера?
- Как дебажишь код, какие инструменты используешь? Как дебажить приложение на сервере?
- Как узнать, что с сервисом что-то не так, тормозит? Как узнать, где именно тормозит?
- Что такое буква D (Dependency Inversion) в SOLID? Приведи пример из своей практики — как это было построено?
- Если пишем какую-то библиотеку, где лучше хранить её реализацию?
- Какие архитектурные паттерны для микросервисов использовали?
- Какой шаблон (структуру) Go-приложения используешь?
- Что такое партиции в Kafka? Почему нельзя просто писать в топик без партиционирования?
- Расскажи про партиционирование: как распределяются сообщения по партициям между консьюмерами?
- Как решить проблему гарантированной записи данных в базу и одновременной отправки сообщения в Kafka (dual write), в том числе если бэкенд отправляет сообщение в очередь и нужно гарантировать, что оно не потеряется при ошибке очереди или сети?
- Что такое consumer lag и из-за чего он бывает?
- Что делать с сообщениями, которые не можем обработать?
- Как работает HTTPS между клиентом и сервером, как шифруются данные и как это защищает от прослушивания (MITM)?
- Что такое сокеты и какими они бывают?
- Работали ли с трейсингом? Какие метрики собирали?
Ещё 197 · вопрос — если осталось время или хочешь глубже
- Какие виды межпроцессного взаимодействия (IPC) бывают?
- Что такое /dev/null? Что такое proc-fs и sys-fs, что содержит каталог /proc?
- Что такое systemd? Чем отличается systemctl restart от systemctl reload?
- Какие технологии изоляции и системы контейнеризации знаешь?
- Что такое namespaces и cgroups в Linux? Как на них построена контейнеризация/Docker?
- Как работает Docker? Из чего состоит экосистема Docker (compose, swarm, k8s)?
- Из чего собирался Docker-контейнер под ваше Go-приложение? Был ли Dockerfile мультистейджовым?
- Назовите основные сущности в Kubernetes.
- Для чего нужен Kubernetes, какие задачи он решает? Зачем нужен деплой в Kubernetes, если есть ReplicaSet?
- Как поднять/запустить два приложения на одном порту?
- Работали ли с Prometheus и телеметрией? Что в Grafana показывалось, что будете логировать/выводить в первую очередь?
- Чем образ (image) отличается от контейнера?
- Как ты выстраиваешь стратегию тестирования? Какие виды тестов (unit, integration, E2E) ставишь в первую очередь? Как определяешь достаточное покрытие?
- Надо ли мокать юзкейсы в Go?
- Как ускорять тесты? (t.Parallel)
- Что такое бенчмарк? Что он выводит? Как выглядит строка, которую он выводит? В каких случаях его используешь?
- Какие инструменты мониторинга и отладки сервисов используешь (в Go и внешние)?
- Как трейсил микросервисы? (OpenTelemetry)
- Приложение начало потреблять 100% CPU. Как определить проблему и что предпринять?
- Приложение начало потреблять 100% RAM. Как понять, что происходит?
- Эндпоинт медленный (200ms). Что будешь делать?
- Как уронить приложение специально в рандомный момент времени (краш-тест)? panic нельзя, fatal нельзя — нужно стандартной библиотекой или инструментами Go.
- Как в Go работают зависимости (модули), какие создаются артефакты?
- Используете ли вы зависимости из внутренних (приватных) репозиториев при сборке приложения?
- Допустим, несколько подсистем — как организовать этот код? Какой интерфейс сделать? Расскажи про паттерн Strategy.
- Что такое декораторы (паттерн «декоратор»)?
- Какие паттерны проектирования применял в своих проектах? Что такое event sourcing, CQRS, eventual consistency? Какие плюсы и минусы этих паттернов?
- Что такое event sourcing? Что такое CQRS?
- Расскажите про проектирование сервиса (как подходили к проектированию).
- Расскажите про событийно-ориентированную архитектуру.
- Что такое слоёная архитектура? Что такое DDD?
- Какие признаки хорошей архитектуры сервиса ты назовёшь (слабая связность, тестируемость, изоляция домена от инфраструктуры) и как это проверить на практике?
- Что такое function options (паттерн функциональных опций)?
- Почему использовали Kafka, а не RabbitMQ или NATS?
- Зачем нужен Exchange в RabbitMQ?
- Представь, что тебе нужно реализовать очередь задач. Что будешь использовать?
- Как работает consumer group в Kafka? Что такое партиция? Как распределяются сообщения при разном числе консьюмеров и партиций, за счёт чего каждый консьюмер читает только свои данные, где хранятся offset'ы, и как приложение после рестарта продолжает читать с места остановки?
- Что такое оффсет в Kafka?
- Можно ли сделать так, чтобы продюсер писал все сообщения в одну партицию?
- Что такое консюмер-группа?
- Всегда ли один и тот же консюмер будет обрабатывать одни и те же 2 партиции?
- Как сделать сервис идемпотентным?
- Как замерять пропускную способность на Kafka?
- Мы записываем историю действий пользователя и хотим агрегировать их, чтобы обновлялся счёт пользователя. Каким образом лучше организовать балансировку отправки событий в Kafka?
- В потоке синхронно приходит количество списаний по пользователю. Как организовать асинхронную работу в этом случае? На что надо обращать внимание при использовании Kafka — настройки подписчика и настройки продюсера?
- Сервис читает сообщения из топика и на каждое сообщение пишет что-то в базу. Сообщений стало слишком много, и база не справляется. Как решить проблему на уровне сервиса?
- Если пакет пришёл повреждённым по плохой сети, может ли клиент определить, что пакет убит? Если может — что делает дальше? Если не может — что делает?
- На компьютере одна сетевая карта, но много приложений смотрят в интернет (браузер, мессенджеры). На сетевую карту приходит TCP-пакет из интернета. Как система понимает, какому приложению он принадлежит?
- Почему сертификат проверяется после TLS Handshake? Не безопаснее ли сначала проверить сертификат, а потом устанавливать соединение?
- За счёт чего осуществляется стриминг данных в HTTP/1? Какая для этого нужна инструкция (заголовок)?
- Как решаешь проблему версионирования API?
- Что такое gRPC server reflection, зачем его включают и какие у этого риски в проде?
- Что означает поле Reserved в protobuf?
- Зачем нужен sint32 и чем он отличается от обычного int32?
- Чем отличаются REST, gRPC и GraphQL и что выберешь для API под высокий RPS — почему?
- Что такое reverse proxy? Чем отличается от forward proxy?
- Как с помощью Wireshark или tcpdump найти, почему запрос к сервису зависает или рвётся (что смотреть в захвате)?
- Какие модели согласованности (consistency models) существуют в распределённых системах?
- Что такое кворум? Какие виды кворума ты знаешь?
- Как реализовать взаимодействие между бэком и фронтом?
- Зачем нужны микросервисы, как обеспечивается их отказоустойчивость?
- Монолит или микросервисы: какие плюсы и минусы у каждого подхода и при каких условиях ты выберешь одно или другое?
- Из каких слоёв состоит микросервис? По каким признакам строилась микросервисная архитектура?
- Circuit breaker, Saga (виды, отличия) — что использовали?
- Расскажите про паттерны Outbox, Inbox, Saga.
- Для чего нужен rate-limiter?
- Что такое graceful degradation?
- Что делать, если инстанс приложения упадёт? Как решать проблему потери данных при падении приложения?
- Кластер Kubernetes будет готов только через пару часов, а сервис должен работать без простоя всё это время. Как временно обеспечить его доступность и отказоустойчивость?
- Приложение обращается к стороннему сервису, который долго отвечает. Почему это происходит и что можно сделать?
- Есть таймаут на ручке, сервис аналитики тормозит. Что можно сделать, чтобы отправлять данные в аналитику, но чтобы это не влияло на работу основного сервиса?
- Ты развернул погодный сервис на VPS. Его начали DDoS'ить. Что будешь делать?
- Как быть, если мы отправили сообщения в push-сервис, но одно из них не отработало?
- Чем отличается балансировка на уровне L4 (транспортный уровень) от L7 (уровень приложения)? Для чего нужна каждая из них?
- Какие алгоритмы балансировки нагрузки (round robin, least connections, consistent hashing) и способы горизонтального/вертикального масштабирования знаешь и когда что применять?
- Если упираемся в CPU при нормально написанном коде и нужно масштабироваться — что делать?
- Что надёжнее — синхронная или асинхронная репликация?
- Что такое три сигнала observability — логи, метрики, трейсы: чем они отличаются и какую проблему решает каждый?
- Что будете логировать в первую очередь?
- Как организовать мониторинг, куда смотреть при поломке сервиса?
- Что означают аббревиатуры SLI, SLO, SLA?
- У тебя валится сервис А с 502, хотя до этого всё было ок — что будешь смотреть и где?
- Как бы вы расследовали проблему, если в продакшене внезапно вырос response time сервиса?
- Наш сервис заполняют аналитикой из Redis, посчитанной за предыдущий день — это коэффициент, на который должна быть увеличена стоимость товара. К сервису по gRPC пытаются подключиться 4 сервиса; если они не могут достучаться за 1 секунду, используют коэффициент 1. Обнаружили, что сервис в течение недели всем выдавал единицу — перечисли все возможные причины, почему сервис мог не работать.
- Тебе приходит тикет от junior QA, что пользователь видит 503 — это единичный запрос. Что ты можешь сделать в этой ситуации?
- С какими проблемами в production сталкивались и как их предотвращали?
- Как проверяется валидность JWT? Как бы ты сам, без библиотек, реализовал валидацию?
- Какие claims нужны для работы с JWT? Что говорит спецификация?
- Можно ли отозвать JWT у пользователя?
- От каких типов атак нужно защищаться при написании кода?
- Что такое CSRF? Как от него защититься?
- Что такое Man-in-the-Middle и как с ним бороться?
- Какие сетевые атаки ты знаешь (DDoS, MITM, spoofing, replay) и как от каждой защищается бэкенд-сервис?
- Как на вашем проекте работает авторизация, как вы с ней работали?
- Какой протокол использовали для аутентификации?
- Потребляет ли память зомби-процесс?
- Какие сигналы в Linux знаешь?
- Что такое процесс и поток в операционной системе? Какие ресурсы принадлежат потоку, какие процессу? Бывает ли процесс с 0 потоков?
- Что такое inode?
- Какое ограничение на открытие файлов в Linux?
- Можно ли на Go писать драйверы для ядра Linux?
- CPU Steal time = 10. Что это значит?
- Есть главная ветка и своя ветка — если сделать rebase на мастер, не создаст ли это проблем?
- Какие практики есть для уменьшения размера образа (multistage build)?
- Что такое CSI и CNI? Чем они отличаются?
- Чем отличается Deployment от StatefulSet?
- Что делают пробы liveness и readiness?
- Сколько минимальных узлов нужно, чтобы поднять кластер Kubernetes?
- Как можно повлиять на решение куб-шедулера (kube-scheduler)?
- Как расшифровываются следующие аббревиатуры: GVK, CFQ, MTTR, MTU?
- Какие типы метрик существуют в Prometheus?
- Что смотришь в Grafana?
- Как лучше деплоиться? Какие есть стратегии деплоя?
- С какими проблемами при деплое продукта приходилось сталкиваться на практике?
- Где должна храниться конфигурация микросервисов, в том числе секретные настройки?
- Что такое MAC-адрес? Как узнать/посмотреть MAC-адрес сервера?
- В чём отличия HTTP и HTTPS? Что такое HTTPS и для чего нужен?
- Как убить процесс в Linux? Как работает команда kill?
- Чем rebase отличается от merge? Что лучше использовать?
- Какие основные команды Docker знаете? (запуск, список контейнеров, подключение к контейнеру, копирование файлов)
- Что такое пирамида тестирования?
- Расскажи про принципы KISS, DRY, SOLID.
- Расскажи про модель OSI. На каком уровне OSI находятся протоколы IP, TCP, ARP?
- Что такое REST? Какие у него принципы?
- Что такое SQL-инъекция и как её предотвратить, в том числе на уровне БД?
- Какой командой проверить потребляемые системные ресурсы (по процессам, памяти, диску) в Unix/Linux?
- Что такое pipe (конвейер)? Каким символом Bash он обозначается?
- Какими инструментами для визуализации схем архитектуры пользовались?
- Для чего нужны очереди в брокерах сообщений? / Что такое очередь сообщений в брокере?
- Чем отличается топик от партиции?
- Как устанавливается TCP-соединение (three-way handshake)? Как передаются данные по TCP?
- Какие протоколы прикладного уровня работают поверх TCP и UDP? Привести примеры.
- Зачем нужны коды HTTP и какие они бывают?
- Что такое CORS?
- Расскажи про балансировку нагрузки.
- Что такое JWT?
- Что делает команда grep? Как работают команды touch и grep?
- Какой одиночный ключ команды ls позволяет вывести также файлы, чьи имена начинаются с точки, без изменения формата вывода?
- Что делать, если закоммитил коммит с ошибкой или сделал коммит не в ту ветку?
- Какой командой можно перенести коммит из другой ветки? Что делает cherry-pick?
- Как посмотреть историю коммитов? Что делает git blame?
- Для чего нужен docker-compose?
- С чего начинается Dockerfile? Что делает команда RUN?
- Был ли опыт самостоятельного написания Dockerfile? Приходилось ли самому разворачивать Docker-образ?
- Где в Go принято писать unit-тесты?
- Как понять покрытие тестами? Какие для этого есть флаги?
- Какие флаги для тестов знаешь? (бенчмарк, -v, cover, таймаут и т.д.)
- Для чего нужен линтер?
- Знаком ли ты с антипаттерном God Function?
- С какими брокерами сообщений работали (Kafka, NATS, RabbitMQ), для чего они используются в ваших сервисах?
- Что такое топик в Kafka?
- Какие библиотеки для Kafka использовал?
- Знаешь, что такое NAT?
- Что такое DHCP?
- Что такое маска подсети?
- Какие знаешь заголовки в HTTP и что они означают?
- Как в HTTP-запросе указать, что тело отправляется в формате JSON, а принять клиент готов только XML? Назовите оба заголовка с точными значениями.
- Какой HTTP-код из диапазона 3xx используется, когда ресурс перенесён постоянно и клиент должен запрашивать его по новому URL в будущем?
- Назовите стандартный HTTP-метод, который согласно спецификации является идемпотентным, но при этом может изменять состояние ресурса, то есть не считается «безопасным».
- Чем PATCH отличается от PUT в HTTP?
- На базе чего построен протокол HTTP — TCP или UDP?
- В чём отличие 80 и 443 портов, принимающих клиентские запросы?
- Какие внешние сервисы использовались в проекте, как происходило взаимодействие с ними?
- Какие веб-фреймворки в Go использовал?
- Какие протоколы межсервисного взаимодействия знаешь (HTTP/REST, gRPC, WebSocket, AMQP/Kafka) и когда какой выбирать?
- Что такое вертикальное и горизонтальное масштабирование?
- Что такое хайлоад, какие у него критерии?
- На основе чего у вас были сессии — JWT или что-то другое?
- Можем ли мы прочитать содержимое JWT, не зная секретного ключа?
- Можно ли хранить в токене конфиденциальную информацию?
- В чём разница между симметричным и асимметричным шифрованием?
- Что такое swap?
- В выводе ps столбец STAT может содержать символ «Z». Что означает этот символ?
- Как скопировать файл по ssh?
- Как посмотреть сетевые интерфейсы?
- Как сделать запрос в сеть без браузера (например, через curl, telnet, netcat)?
- Как понять, была ли команда в *nix выполнена успешно? Например, команда rm /not_exists — как узнать, была ли ошибка?
- Что такое sudo? Где находится файл настройки прав (sudoers)?
- Какими командами Linux пользуешься, чтобы на сервере посмотреть процессы, нагрузку, сеть, диск и логи сервиса?
- Назовите 5 трёхсимвольных команд Linux (например pwd, cat, man, git).
- Какой ОС пользуешься для разработки и чем окружение macOS отличается от Linux, на котором крутится сервис?
- Как создать файл в папке (через терминал)?
- Нужно каждые 20 секунд запускать скрипт. Как реализуешь?
- Что делает команда git squash?
- В рабочем каталоге изменили файл, выполнили git add, затем файл снова изменили, но git add больше не запускали. Какая версия будет сохранена при git commit?
- Почему при разработке новой функциональности принято создавать отдельную ветку feature/…, а не коммитить сразу в main?
- Коллега добавил новый тег в удалённый репозиторий. После обычного git pull тег не появился локально. Какой командой синхронизировать только теги без загрузки всех веток?
- Назовите любые 6 команд Git.
- Какой командой git можно получить обновления из удалённого репозитория, не сливая их с текущей веткой?
- Какой командой git можно изменить базовый коммит, от которого начинается текущая ветка?
- Как прокинуть код в контейнер и запустить его?
- Можно ли в Docker сохранять/загружать данные (volumes)?
- Из каких файлов состоит минимальный Go-проект (go.mod, go.sum, main.go) и как собрать его в Docker-образ?
- Какие системы оркестрации знаешь?
- Как посмотреть логи, в том числе в реальном времени?
- Какие плюсы и минусы непрерывной интеграции (CI)?
- Как билдились приложения, как вы с ними работали как разработчики?
Лайвкодинг
0/3- Оформление заказа с уведомлением в брокер30 мин
- Функциональные опции для конструктора15 мин
- Консьюмер со склейкой обновлений30 мин