Необходимо реализовать middleware. Middleware будет отбрасывать n+1 запрос за секунду. Мы не пропускаем больше 100 запро
Условие
Заголовок раздела «Условие»Необходимо реализовать middleware. Middleware будет отбрасывать n+1 запрос за секунду. Мы не пропускаем больше 100 запросов, например, как у нас здесь на 25 строчке указано, за одну секунду. То есть, если 101 пришел, то мы вернем клиенту ошибку с 429 статусом. Можно доработать конструктор, можно доработать структуру и можно добавить дополнительные приватные методы, если они нужны. Все, что выше комментария, править разрешено, все, что ниже комментария - не править. Как много памяти будет потреблять алгоритм и может ли быть проблема с памятью? Какова алгоритмическая сложность алгоритма? Как можно уменьшить алгоритмическую сложность?
type RateLimiter struct { N int}
func NewRateLimiter(n int) *RateLimiter { return &RateLimiter{}}
func (rl *RateLimiter) Middleware(h func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter) { return h}
func handler(w http.ResponseWriter, r *http.Request) { fmt.Println("REQUEST COMPLETED ")}
func main() { rl := NewRateLimiter(100) http.HandleFunc("/", rl.Middleware(handler))
go func() { for i := 0; i < 1000; i++ { time.Sleep(10 * time.Millisecond) if _, err := http.Get("http://localhost:8080/"); err != nil { log.Fatal(err) } os.Exit(0)
} }()}Решение
Заголовок раздела «Решение»Источник: Kaspersky / Касперский - 5 · 2 кв 2025
← Что выведется в первом, во втором и в т… · Все задачи · Go · Что выведет этот код? →