Паттерны проектирования

12 вопросов

Паттерны проектирования в Go: Functional Options, Worker Pool, Fan-in/Fan-out, Pipeline, Circuit Breaker, Retry с backoff, Dependency Injection, Middleware, Singleflight.

1 Что такое многослойная (layered) архитектура и как она выглядит в Go-приложении? 🟢 Лёгкий
Ответ: B) Разделение на слои: представление (handler) -> бизнес-логика (service) -> доступ к данным (repository)

Layered architecture делит приложение на слои с четкими обязанностями: handler принимает запросы, service содержит логику, repository работает с данными. Каждый слой зависит только от нижнего.

Подробнее →
2 Что такое паттерн Functional Options в Go и для чего он используется? 🟡 Средний
Ответ: A) Передача опциональных параметров в конструктор через функции-опции (WithTimeout, WithLogger)

Functional Options позволяет передавать опции в конструктор через функции (WithTimeout, WithLogger), давая гибкий и расширяемый API.

Подробнее →
3 Как устроен worker pool (пул воркеров) в Go и зачем он нужен? 🟡 Средний
Ответ: A) Фиксированное число горутин обрабатывает задачи из общего канала, ограничивая параллелизм

Worker pool - это N горутин, читающих задачи из одного канала; ограничивает параллелизм и предсказуемо нагружает систему.

Подробнее →
4 Что такое fan-in в контексте каналов Go? 🟡 Средний
Ответ: A) Объединение нескольких входных каналов в один выходной

Fan-in - объединение нескольких каналов в один; данные из многих источников поступают в один общий канал.

Подробнее →
5 Что такое fan-out в контексте каналов Go? 🟡 Средний
Ответ: A) Распределение задач из одного канала между несколькими горутинами-обработчиками

Fan-out - один канал-источник читается несколькими горутинами; каждая задача обрабатывается одним из воркеров.

Подробнее →
6 Как реализуется pipeline (конвейер) в Go? 🟡 Средний
Ответ: A) Цепочка этапов: каждый этап читает из входного канала и пишет в выходной

Pipeline - цепочка этапов, связанных каналами; каждый этап читает из канала и пишет в следующий.

Подробнее →
7 Чем полезен retry с exponential backoff при вызовах внешних сервисов? 🟡 Средний
Ответ: A) Повторные попытки с увеличивающейся задержкой снижают нагрузку на восстанавливающийся сервис

Exponential backoff увеличивает паузу между повторами (1s, 2s, 4s...), снижая нагрузку на сервис.

Подробнее →
8 Как в Go обычно делают Dependency Injection без тяжелых фреймворков? 🟡 Средний
Ответ: A) Интерфейсы описывают зависимости, конструктор принимает реализации интерфейсов

Зависимости описываются интерфейсами, конкретные реализации передаются в конструктор; тесты подставляют моки.

Подробнее →
9 Как реализуется цепочка middleware для HTTP в Go? 🟡 Средний
Ответ: A) Middleware - функция func(http.Handler) http.Handler; оборачивает следующий обработчик

Middleware - func(http.Handler) http.Handler; оборачивает следующий handler и при необходимости вызывает его.

Подробнее →
10 В чём суть Clean Architecture и Hexagonal Architecture (Ports and Adapters)? 🟡 Средний
Ответ: B) Домен в центре, зависимости направлены внутрь; внешний мир подключается через интерфейсы (порты) и адаптеры

Clean Architecture и Hexagonal Architecture ставят бизнес-логику в центр, изолируя её от инфраструктуры (БД, HTTP, внешних API) через интерфейсы. Зависимости всегда направлены к домену.

Подробнее →
11 Что делает паттерн Circuit Breaker и в каких состояниях он может находиться? 🔴 Сложный
Ответ: A) Прерывает вызовы к ненадежному сервису при сбоях; состояния: Closed, Open, Half-Open

Circuit Breaker при серии ошибок переходит в Open (не вызывает сервис); после таймаута пробует снова (Half-Open); при успехе - Closed.

Подробнее →
12 Для чего нужен паттерн singleflight и как он реализован в Go? 🔴 Сложный
Ответ: A) При множестве одновременных запросов с одним ключом выполняется только один реальный вызов

Singleflight объединяет конкурентные запросы с одним ключом в один вызов; остальные ждут и делят результат.

Подробнее →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.